前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?

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

作者头像
沈唁
发布2018-08-21 15:10:55
1.4K0
发布2018-08-21 15:10:55
举报
文章被收录于专栏:沈唁志沈唁志

RSA算法是现今使用最广泛的公钥密码算法,也是是号称地球上最安全的加密算法,与 md5 和 sha1 不同,到目前为止,也只有极短的RSA加密被破解

根据密钥的使用方法,可以将密码分为对称密码和公钥密码

对称密码:加密和解密使用同一种密钥的方式,常用的算法有DES以及AES

公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码,常用的算法有 RSA

RSA加密的使用的场景很多,比如在编写API接口的时候、进行支付等安全需求比较高的通信以及进行数据传输的时候都需要用到加密措施来保证数据的安全

最近在打算做一个授权系统,也要用到这个RSA加密算法,所以这篇文章先说一下怎么生成RSA加解密所需要的公私钥

Windows下生成需要openssl.cof的支持,如果你装了Git bash客户端的话,也可以直接操作

我这里使用的是PHPStudy的集成环境,在它的Apache\conf目录下就有一个openssl.cof,我们可以直接拿来使用

先说使用openssl.cof的操作

代码语言:javascript
复制
<?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 私钥文件

代码语言:javascript
复制
openssl genrsa -out rsa_private_key.pem 1024

其次,将原始RSA私钥转换为pkcs8格式

代码语言:javascript
复制
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

最后,生成RSA公钥

代码语言:javascript
复制
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

举一个简单的栗子 ?

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

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

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

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

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

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档