PHP的RSA非对称加解密

对称加密算法是在加密和解密时使用同一个密钥。与对称加密算法不同,非对称加密算法需要两个密钥–公开密钥(public key)和私有密钥(private key)进行加密和解密。公钥和密钥是一对,如果公开密钥对数据进行加密,只有对应私有密钥才能解密;如果用私有密钥对数据加密,那么只有对应公有密钥才能解密。常用算法:RSA、Elgamal、背包算法、Rabin、ECC等。RSA是最有影响力的公钥加密算法之一。

加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

使用openssl生成私钥与公钥,一般Linux系统都带有这个工具,没有自行安装,或者使用windows的图形界面软件生成。

# 生成私钥openssl genrsa -out rsa_private_key.pem 1024# 生成公钥openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

分别执行上面两行命令即可在当前目录下生成私钥与公钥。

linux工具安装命令,一般都带,没有再装

yum install openssl
yum install openssl-devel

下面是php测试代码

<?php
//PHP的RSA非对称加解密
//https://www.daimadog.com/7823.html
$private_key_file = "rsa_private_key.pem";
$public_key_file = "rsa_public_key.pem";
$data = "hello world";
if (file_exists($private_key_file)) {
$private_key = file_get_contents($private_key_file);
} else {
die("private key not exists");
}
if (file_exists($public_key_file)) {
$public_key = file_get_contents($public_key_file);
} else {
die("public key not exists");
}

//私钥加密,公钥解密
$encrypted = $decrypted = "";
openssl_private_encrypt($data, $encrypted, $private_key); // 使用私钥加密数据
echo $encrypted;
openssl_public_decrypt($encrypted, $decrypted, $public_key);// 使用公钥进行解密
echo $decrypted;

//公钥加密,私钥解密
$encrypted = $decrypted = "";
openssl_public_encrypt($data, $encrypted, $public_key);// 使用公钥加密数据
echo $encrypted;
openssl_private_decrypt($encrypted, $decrypted, $private_key); // 使用私钥进行解密
echo $decrypted;
?>

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/242517.html

(0)
上一篇 2022年4月7日
下一篇 2022年4月7日

相关推荐

发表回复

登录后才能评论