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