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