Heim >Backend-Entwicklung >PHP-Tutorial >php rsa加密解密使用详解_PHP

php rsa加密解密使用详解_PHP

WBOY
WBOYOriginal
2016-05-31 13:18:05806Durchsuche

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

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

代码如下:


openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给android跟ios等前端

2、php中用生成的公钥、私钥进行加密解密,直接上代码

代码如下:


$fp=fopen("rsa/rsa_private_key.pem","r"); //你的私钥文件路径
$private_key=fread($fp,8192);
fclose($fp);
$fp1=fopen("rsa/rsa_public_key.pem","r"); //你的公钥文件路径
$public_key=fread($fp1,8192);
fclose($fp1);
//echo $private_key;
$pi_key=openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key=openssl_pkey_get_public($public_key );//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n"; echo "
";
print_r($pu_key);echo "\n"; echo "
";
echo "


";
$data='php ras加密算法';
$encrypted = "";
$decrypted = "";
echo "加密的源数据:".$data."\n"; echo "
";
echo "private key encrypt:\n"; echo "
";
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo '私钥加密后:'.$encrypted."\n"; echo "
";echo "
";
echo "public key decrypt:\n"; echo "
";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo '公钥解密后:'.$decrypted."\n"; echo "
";
echo "
";
echo "public key encrypt:\n"; echo "
";
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n"; echo "
";
echo "private key decrypt:\n"; echo "
";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n"; echo "
";

PHP的RSA配置常见问题

●PHP开发语言的代码示例中openssl文件夹中的3个DLL文件用法

1、如果你的系统是windows系统,且system32文件目录下没有libeay32.dll、ssleay32.dll这两个文件
那么需要拷贝这两个文件到system32文件目录。

2、如果您的php安装目录下(php\ext)中没有php_openssl.dll

那么请把php_openssl.dll放在这个文件夹中

喜欢加密解密的小伙伴一定要好好看看这篇文章,受益匪浅。。。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn