RSA算法是现今使用最广泛的公钥密码算法,也是是号称地球上最安全的加密算法,与 md5
和 sha1
不同,到目前为止,也只有极短的RSA加密被破解
根据密钥的使用方法,可以将密码分为对称密码和公钥密码
对称密码:加密和解密使用同一种密钥的方式,常用的算法有DES
以及AES
公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码,常用的算法有 RSA
RSA
加密的使用的场景很多,比如在编写API
接口的时候、进行支付等安全需求比较高的通信以及进行数据传输的时候都需要用到加密措施来保证数据的安全
最近在打算做一个授权系统,也要用到这个RSA
加密算法,所以这篇文章先说一下怎么生成RSA
加解密所需要的公私钥
在Windows
下生成需要openssl.cof
的支持,如果你装了Git bash
客户端的话,也可以直接操作
我这里使用的是PHPStudy
的集成环境,在它的Apache\conf
目录下就有一个openssl.cof
,我们可以直接拿来使用
先说使用openssl.cof
的操作
<?php
$config = array(
"config" => "D:\phpStudy\Apache\conf\openssl.cnf",
"digest_alg" => "sha512",
"private_key_bits" => 1024, //字节数 512 1024 2048 4096 等
"private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型
);
//创建公钥和私钥 返回资源
$res = openssl_pkey_new($config);
//从得到的资源中获取私钥,把私钥赋给$privKey
openssl_pkey_export($res, $privKey, null, $config);
//从得到的资源中获取公钥,返回公钥$pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo '<pre>';
var_dump(array('privKey' => $privKey, 'pubKey' => $pubKey));
将config
指向的路径改为你的openssl.cof
的路径,加密类型和字节数可以根据你的需求去更改
下面说一下使用Git bash
来操作,首先,生成原始 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
举一个简单的栗子 😈
公钥、私钥都可以加密,也都可以解密
用公钥加密需要私钥解密,称为“加密”。由于私钥是不公开的,确保了内容的保密,没有私钥无法获得内容
使用公钥加密数据,刷新或者重新请求会改变加密后返回的字符串
用私钥加密需要公钥解密,称为“签名”。由于公钥是公开的,任何人都可以解密内容,但只能用发布者的公钥解密,验证了内容是该发布者发出的
使用私钥加密数据,刷新或者重新请求不会改变加密后返回的字符串
发表评论
沙发空缺中,还不快抢~