php rsa 非对称加密
2016-01-09 23:05
633 查看
php rsa 加密 相关 api
openssl_pkey_get_private// 用来判断私钥是否可用,可用则返回 Resource id
resource openssl_pkey_get_private(mixed key[,stringpassphrase = “”])
openssl_pkey_get_public
// 用来判断公钥是否可用,可用则返回 Resource id
resource openssl_pkey_get_public(mixed $certificate)
参数问题
其中参数 $key $certificate 有一种传递形式:容易出错 file://path/to/file.pem
// return false // 'file:///' 多了一个 '/' openssl_pkey_get_private('file:///E:/SAFARI_SHI/tmp/key/rsa_private_key.pem'); // 应该是两个 '//' // resource(4) of type (OpenSSL key) $privateKey = openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/rsa_private_key.pem'); // resource(4) of type (OpenSSL key) openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/private_key.pem'); // -------------------------------------------------------- // return false // 这种形式亦是错误的 openssl_pkey_get_public('key/rsa_public_key.pem'); // return false openssl_pkey_get_public('file:///E:/SAFARI_SHI/tmp/key/rsa_public_key.pem'); // resource(5) of type (OpenSSL key) openssl_pkey_get_public('file://E:/SAFARI_SHI/tmp/key/rsa_public_key.pem');
ps
关于私钥的话,会有两个 rsa_private_key.pem private_key.pem 我试了下,两个都可以使用
code demo
<?php /** * php rsa demo * rsa 非对称加密 * 公钥、私钥对 * 私钥加密的内容能通过公钥解密(反过来亦可以) * * 2016-01-09 21:58:48 */ // 这个函数可用来判断私钥是否可用,可用返回 Resource id $privateKey = openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/rsa_private_key.pem'); // 这个函数可用来判断公钥是否可用,可用返回 Resource id $publicKey = openssl_pkey_get_public('file://E:/SAFARI_SHI/tmp/key/rsa_public_key.pem'); print_r($privateKey); echo "\n"; print_r($publicKey); echo "\n"; // 原始数据 $data = 'aa11-22-334'; $encrypted = ''; $decrypted = ''; echo "---------------------------------------\n"; var_dump('原始数据', $data); echo "---------------------------------------\n"; var_dump('私钥加密'); // 私钥加密 openssl_private_encrypt($data, $encrypted, $privateKey); // 加密后的内容通常含有特殊字符,需要编码转换下 // 在网络间通过url传输时要注意base64编码是否是url安全的 $encrypted = base64_encode($encrypted); var_dump($encrypted); var_dump('公钥解密'); // 私钥加密的内容可通过公钥解密出来 openssl_public_decrypt(base64_decode($encrypted), $decrypted, $publicKey); var_dump($decrypted); echo "---------------------------------------\n"; var_dump('公钥加密'); // 公钥加密 openssl_public_encrypt($data, $encrypted, $publicKey); $encrypted = base64_encode($encrypted); var_dump($encrypted); var_dump('私钥解密'); // 私钥解密 openssl_private_decrypt(base64_decode($encrypted),$decrypted,$privateKey); var_dump($decrypted);
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- OpenSSL编程之RSA
- 每 172 个活动 RSA 证书中就有一个容易受到攻击
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- 用ASP编写的加密和解密类
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- BAT加密工具 EncryBat 非编译型bat批处理加密方案与代码
- C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例