/** * 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; }
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)); }