Linux用户(以Ubuntu为例)
sudo apt-get install openssl
Windows用户
开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。
Linux用户(以Ubuntu为例), 先在terminal下创建一个文件夹,然后进入文件夹
genrsa -out rsa_private_key.pem 1024
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
此时私钥和公钥就在当前文件夹下创建好了
以下是在mac上的生成记录
wenqidongdeMBP:~ wenqidong$ openssl genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
......................+++++
.+++++
e is 65537 (0x010001)
wenqidongdeMBP:~ wenqidong$
wenqidongdeMBP:~ wenqidong$ openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
writing RSA key
wenqidongdeMBP:rsa wenqidong$ ls
rsa_private_key.pem rsa_public_key.pem
使用私钥加密-->使用公钥解密
使用公钥加密-->使用私钥解密
public function testRsa()
{
$privateKeyFilePath = '../rsa/rsa_private_key.pem';
$publicKeyFilePath = '../rsa/rsa_public_key.pem';
extension_loaded('openssl') or die('php需要openssl扩展支持');
(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('文件路径不正确');
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
($privateKey && $publicKey) or die('密钥或者公钥不可用');
// 加密数据
$originalData = '{"user_name":"admin","password":"123456","code":"9KL2"}';
// 加密以后的数据
$encryptData = '';
echo '原数据为:', $originalData, PHP_EOL;
//用私钥加密
if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
// 加密后 可以base64_encode后方便在网址中传输
echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;
} else {
exit('加密失败');
}
//用公钥解密
//解密以后的数据
$decryptData = '';
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;
} else {
exit('解密成功');
}
// 用公钥加密数据
if (openssl_public_encrypt($originalData, $encryptData, $publicKey)) {
echo '公钥加密数的数据为:' . base64_encode($encryptData) . PHP_EOL;
} else {
exit('公钥加密失败');
}
// 用私钥解密数据
if (openssl_private_decrypt($encryptData, $decryptData, $privateKey)) {
echo "私钥解密数据后:" . $decryptData . PHP_EOL;
} else {
exit('私钥解密失败');
}
}
输出:
原数据为:{"user_name":"admin","password":"123456","code":"9KL2"}
加密成功,加密后数据(base64_encode后)为:QN1MNSy8yKpjfE7KzcxCEoMT6h9ErJRhqsWkkVhk2CPupY8MGUgJDLcWi5Mt21bOhPVM1w5teSKysI0AONqqK1kdi0B//Q8KVdlS47HstFUbwjzk+8f1uesnEmUf549rl/Ye3B8bw77vdeVarxD3LDdxO8RC2h/bE0sav0+m0bU=
解密成功,解密后数据为:{"user_name":"admin","password":"123456","code":"9KL2"}
公钥加密数的数据为:edLH7O340I0WIBBdzuF0VAXDBpcIQgspFd2EZBbGYvlhn3aEo5tylkCXrAfyrgAAXakQfMsn9L4H9PdHbLLCZPbwyjYYpVmN2P0CryqTedAliKmwaH66eSundWyvT8G0CE6VRc/d3Gu5bivcPgMOKBZFCY8fUVUnsF5YZU10UiI=
私钥解密数据后:{"user_name":"admin","password":"123456","code":"9KL2"}
参见:支付宝rsa私钥公钥创建与提交 https://blog.csdn.net/zhouhui520w/article/details/49885135
linux 需要安装openssl工具包,传送门http://www.openssl.org/source/
window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html