已有AES秘钥,RSA私钥、RSA公钥字符串,请给到一个php加密解密的例子
时间: 2024-03-28 19:40:14 浏览: 180
RSA.zip_RSA CRT_RSA public key_rsa密钥生成_加解密 字符串_字符串
好的,以下是一个 PHP 中使用 AES/CBC/PKCS7Padding 和 RSA 公钥/私钥加密解密的例子:
```php
// AES 加密函数
function aesEncrypt($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc'));
$encrypted = openssl_encrypt($data, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
$result = base64_encode($iv . $encrypted);
return $result;
}
// AES 解密函数
function aesDecrypt($data, $key) {
$data = base64_decode($data);
$iv = substr($data, 0, openssl_cipher_iv_length('aes-128-cbc'));
$encrypted = substr($data, openssl_cipher_iv_length('aes-128-cbc'));
$result = openssl_decrypt($encrypted, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
return $result;
}
// RSA 公钥加密函数
function rsaEncryptPublic($data, $publicKey) {
$publicKey = openssl_get_publickey($publicKey);
openssl_public_encrypt($data, $encrypted, $publicKey, OPENSSL_PKCS1_PADDING);
openssl_free_key($publicKey);
$result = base64_encode($encrypted);
return $result;
}
// RSA 私钥解密函数
function rsaDecryptPrivate($data, $privateKey) {
$privateKey = openssl_get_privatekey($privateKey);
$data = base64_decode($data);
openssl_private_decrypt($data, $decrypted, $privateKey, OPENSSL_PKCS1_PADDING);
openssl_free_key($privateKey);
return $decrypted;
}
// 例子:加密一个字符串
$data = 'Hello World!';
$aesKey = '1234567890123456';
$rsaPublicKey = '-----BEGIN PUBLIC KEY-----\n...公钥字符串...\n-----END PUBLIC KEY-----';
$rsaPrivateKey = '-----BEGIN PRIVATE KEY-----\n...私钥字符串...\n-----END PRIVATE KEY-----';
// 先使用 AES 加密数据
$encryptedData = aesEncrypt($data, $aesKey);
// 再使用 RSA 公钥加密 AES 密钥
$encryptedAesKey = rsaEncryptPublic($aesKey, $rsaPublicKey);
// 解密 AES 密钥
$decryptedAesKey = rsaDecryptPrivate($encryptedAesKey, $rsaPrivateKey);
// 使用解密后的 AES 密钥解密数据
$decryptedData = aesDecrypt($encryptedData, $decryptedAesKey);
echo $decryptedData; // 输出:Hello World!
```
注意,这只是一个简单的例子,实际使用时还需要考虑一些安全问题,比如密钥管理、数据完整性等。
阅读全文