PHP 生成RSA密钥证书以及RSA加密解密


1,生成证书

$config = 
[
    'config' => dirname(__FILE__) . '/openssl.cnf', // 定位至你的openssl.cnf文件
    'digest_alg' => 'SHA512', // openssl_get_md_methods() 的返回值是可以使用的加密方法列表
    'private_key_bits' => '4096', 
    'private_key_type' => OPENSSL_KEYTYPE_RSA
];

$resource = openssl_pkey_new($config);

// 生成私钥
openssl_pkey_export($resource, $privateKey, null, $config);

// 生成公钥
$details = openssl_pkey_get_details($resource);
$publicKey = $details['key'];

// 将密钥信息写入文件,生成证书。
// 实际使用时建议将公钥与私钥写入不同文件中分开存放。
$file = fopen('rsa_key_pem', 'w');
fwrite($file, $privateKey . "\n" . $publicKey);
fclose($file);

2,从证书中提取密钥信息

$file = fopen('rsa_key_pem', 'r');
$content = fread($file, filesize('rsa_key_pem'));
fclose($file);

// 从证书中提取私钥信息
$privateKey = openssl_pkey_get_private($content);
// 从证书中提取公钥信息
$publicKey = openssl_pkey_get_public($content);

3,使用公钥加密字符串并用私钥解密

// 要加密的文本
$text = "xmsb";

// openssl_public_encrypt() 用公钥加密
// openssl_private_decrypt() 用私钥解密
// openssl_private_encrypt() 用私钥加密
// openssl_public_decrypt() 用公钥解密
// 这四个函数,返回true表示加密和解密成功,失败则返回false。加密和解密的结果被储存在第2个参数中

if(openssl_public_encrypt($text, $crypted, $publicKey))
{
    // 原始加密结果是不可读的二进制,所以要再用base64转换为可以正常使用的字符串
    $enb64Cry = base64_encode($crypted);
}

if(openssl_private_decrypt(base64_decode($enb64Cry), $decrypted, $privateKey))
{
    var_dump($decrypted);
}
 
posted @ 2020-12-16 15:58  何效名  阅读(1026)  评论(0编辑  收藏  举报