PHP 使用非对称加密算法 (RSA)
来源:互联网 发布:淘宝网看手机 编辑:程序博客网 时间:2024/06/08 19:04
PHP 使用非对称加密算法 (RSA)
2016-06-02 PHPer IT小圈儿
解释
「非对称加密算法」需要两个密钥:公钥(publickey)和私钥(privatekey)。
公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;
如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
使用场景
PHP 为客户端 编写API,对数据加/解密。
创建私钥、公钥
//生成原始 RSA私钥文件
openssl genrsa -out rsa_private_key.pem 1024
//将原始 RSA私钥转换为 pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
//生成RSA公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//我们将私钥rsa_private_key.pem用在服务器端,公钥发放给android跟ios等前端。
服务端类库
class Rsa {
private static $PRIVATE_KEY = 'rsa_private_key.pem 内容'; private static $PUBLIC_KEY = 'rsa_public_key.pem 内容'; /** * 获取私钥 * @return bool|resource */ private static function getPrivateKey() { $privKey = self::$PRIVATE_KEY; return openssl_pkey_get_private($privKey); } /** * 获取公钥 * @return bool|resource */ private static function getPublicKey(){ $publicKey = self::$PUBLIC_KEY; return openssl_pkey_get_public($publicKey); } /** * 私钥加密 * @param string $data * @return null|string */ public static function privEncrypt($data = '') { if (!is_string($data)) { return null; } return openssl_private_encrypt($data,$encrypted,self::getPrivateKey()) ? base64_encode($encrypted) : null; } /** * 公钥加密 * @param string $data * @return null|string */ public static function publicEncrypt($data = '') { if (!is_string($data)) { return null; } return openssl_public_encrypt($data,$encrypted,self::getPublicKey()) ? base64_encode($encrypted) : null; } /** * 私钥解密 * @param string $encrypted * @return null */ public static function privDecrypt($encrypted = '') { if (!is_string($encrypted)) { return null; } return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, self::getPrivateKey())) ? $decrypted : null; } /** * 公钥解密 * @param string $encrypted * @return null */ public static function publicDecrypt($encrypted = '') { if (!is_string($encrypted)) { return null; } return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null; }
}
服务端使用
require_once “Rsa.php”;
$rsa = new Rsa();
$data[‘name’] = ‘Tom’;
$data[‘age’] = ‘20’;
echo ‘私钥加密后:’.$privEncrypt;
echo ‘公钥解密后:’.$publicDecrypt;
echo ‘公钥加密后:’.$publicEncrypt;
echo ‘私钥解密后:’.$privDecrypt;
- PHP 使用非对称加密算法 (RSA)
- [加密]--PHP 使用非对称加密算法(RSA)
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- RSA 非对称加密算法
- 非对称加密算法(RSA)
- RSA ~ 非对称加密算法
- RSA 非对称加密算法
- 非对称加密算法RSA
- 非对称加密算法RSA使用注意事项
- 非对称加密算法-RSA算法
- JAVA 非对称加密算法RSA
- C++(9):函数的一些知识点
- 反射
- 关于烧饼游戏修改器的分析
- 在命令行下运行PHP脚本[带参数]的方法
- 如何处理分类中的训练数据集不均衡问题
- PHP 使用非对称加密算法 (RSA)
- offsetof宏的原理以及作用
- 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建
- jsp9大内置对象详解
- androoid framework学习之 - RILd相关介绍
- int,float,double型转换深析
- SQL语句输出直角三角形
- SAP修改物料价格那些事
- Spring3系列: Spring AOP——Pointcut,Advisor