/**
  * Encrypt using a keyrings
  *
  * @param string $plaintext
  * @param array|string $keys
  * @return string
  * @throws RuntimeException
  */
 public function encrypt($plaintext, $keys = null)
 {
     // generate a random session key
     $sessionKey = Rand::getBytes($this->bCipher->getCipher()->getKeySize());
     // encrypt the plaintext with blockcipher algorithm
     $this->bCipher->setKey($sessionKey);
     $ciphertext = $this->bCipher->encrypt($plaintext);
     if (!is_array($keys)) {
         $keys = ['' => $keys];
     }
     $encKeys = '';
     // encrypt the session key with public keys
     foreach ($keys as $id => $pubkey) {
         if (!$pubkey instanceof PubKey && !is_string($pubkey)) {
             throw new Exception\RuntimeException(sprintf("The public key must be a string in PEM format or an instance of %s", PubKey::class));
         }
         $pubkey = is_string($pubkey) ? new PubKey($pubkey) : $pubkey;
         $encKeys .= sprintf("%s:%s:", base64_encode($id), base64_encode($this->rsa->encrypt($sessionKey, $pubkey)));
     }
     return $encKeys . ';' . $ciphertext;
 }
Exemple #2
0
 public function testEncryptionUsingPrivateKeyBase64Encryption()
 {
     $rsa = new RSA(array('pemString' => $this->_testPemString));
     $encrypted = $rsa->encrypt('1234567890', $rsa->getPrivateKey(), RSA::BASE64);
     $this->assertEquals('1234567890', $rsa->decrypt($encrypted, $rsa->getPublicKey(), RSA::BASE64));
 }