PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?

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

举一个简单的栗子 😈

公钥、私钥都可以加密,也都可以解密

用公钥加密需要私钥解密,称为“加密”。由于私钥是不公开的,确保了内容的保密,没有私钥无法获得内容

使用公钥加密数据,刷新或者重新请求会改变加密后返回的字符串

rsa 公私钥加解密操作

用私钥加密需要公钥解密,称为“签名”。由于公钥是公开的,任何人都可以解密内容,但只能用发布者的公钥解密,验证了内容是该发布者发出的

使用私钥加密数据,刷新或者重新请求不会改变加密后返回的字符串

发表评论

发表评论

*

沙发空缺中,还不快抢~