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

举一个简单的栗子 ?

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

深入浅出密码学(下)

前言 在之前的文章《深入浅出密码学(上)》与《深入浅出密码学(中)》,笔者为大家介绍了密码学中的加密、单向散列函数与消息认证码的概念与应用。这里带大家简单回顾一...

3386
来自专栏前端进阶之路

看图学HTTPS前言正文总结

之前说到HTTPS,在我的概念中就是更安全,需要服务器配置证书,但是到底什么是HTTPS,为什么会更安全,整套流程又是如何实现的,在脑子里没有具体的概念。所以,...

1124
来自专栏PHP在线

看图学 HTTPS

之前说到HTTPS,在我的概念中就是更安全,需要服务器配置证书,但是到底什么是HTTPS,为什么会更安全,整套流程又是如何实现的,在脑子里没有具体的概念。所以,...

1384
来自专栏苦逼的码农

【漫画】https 加密那点事

在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后...

2423
来自专栏程序员宝库

看图学 HTTPS

之前说到HTTPS,在我的概念中就是更安全,需要服务器配置证书,但是到底什么是HTTPS,为什么会更安全,整套流程又是如何实现的,在脑子里没有具体的概念。所以,...

1726
来自专栏白驹过隙

OpenSSL - 利用OpenSSL自签证书和CA颁发证书

48717
来自专栏Python疯子

iOS加密方式:RSA DES MD5

DES:对称加密(服务器和客户端公用同一个秘钥),缺点:一旦被抓包破解了秘钥,就能破解所有的传递信息

1242
来自专栏Script Boy (CN-SIMO)

Qt信号与槽自动关联机制

参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog....

2281
来自专栏java一日一条

详解Https是如何确保安全的?

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单...

661
来自专栏iOS 开发杂谈

HTTPS 之原理

HTTPS 在传输数据之前需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL 协议是一套加密传输的协议,使用了非对...

2316

扫码关注云+社区

领取腾讯云代金券