RSA加密、解密,签名和验签的原理
简介:RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。
注: linux环境下执行命令,或者Windows安装openssl
1.使用openssl生成pkcs8格式秘钥
私钥生成命令:
openssl genrsa -out private_pkcs1.pem 2048 openssl pkcs8 -in private_pkcs1.pem -out private_pkcs8.pem -topk8 -nocrypt
公钥生成命令:
openssl rsa -in private_pkcs1.pem -pubout -out public.pem
使用时可直接提取文件里面的字符串秘钥,或者直接读取对应的秘钥文件。
通过已有的pfx证书文件提取公私钥命令:
openssl pkcs12 -in certificate_p12.pfx -out private_pkcs8.pem -nodes -nocerts openssl rsa -in private_pkcs8.pem -pubout -out public.pem
2.生成pfx文件
1、生成key,openssl.key为key的名字随意起,1024为密钥长度
openssl genrsa -out openssl.key 1024
2、生成cer证书(openssl.key为之前生成的key的名字,openssl.cer为生成的证书名字,3650为证书过期天数,CN的参数***.website是的你主机名或者IP地址(这里一定要写对,不然以后访问的话,浏览器会提示有风险)。
openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=***.website
3、生成需要的pfx私钥文件(会让你输入密码,使用私钥时候使用的(千万不能忘记))
openssl pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer
4、生成crt证书(由于手机需要crt证书,所以需要的话还要生成crt)
openssl req -new -x509 -key openssl.key -out openssl.crt -days 3650
3.不同证书文件格式der、cer、pfx、pem区别
参考博客地址:https://blog.csdn.net/hqy1719239337/article/details/88896074
.*DER*:用二进制DER编码的证书;
.PEM:用ASCLL(BASE64)编码的证书;
.CER:存放公钥,没有私钥;
.PFX:存放公钥和私钥
(pem 后缀的证书都是base64编码;der 后缀的证书都是二进制格式;crt .cer 后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可能是.der);.pfx 主要用于windows平台,浏览器可以使用,也是包含证书和私钥,获取私钥需要密码才可以)
X509文件扩展名(x509 这种证书只有公钥,不包含私钥。)
4.转换方式
可以使用OpenSSL命令行工具在不同证书格式之间的转换
PEM to DER
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM to PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
DER to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
PFX to PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes