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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM