基于openssl生成RSA公私钥对
参考地址:https://www.iteye.com/blog/xw-z1985-1837376
a)从网上下载openssl工具:http://www.slproweb.com/products/Win32OpenSSL.html
b)生成私钥
进入到openssl的bin目录下,执行以下命令:
openssl genrsa -out rsa_private_key.pem 1024
会在bin目录下看到新生成的私钥文件rsa_private_key.pem,文件内容如下:
<!--[if !supportLists]-->1. <!--[endif]-->-----BEGIN RSA PRIVATE KEY-----
<!--[if !supportLists]-->2. <!--[endif]-->MIICXgIBAAKBgQDtd1lKsX6ylsAEWFi7E/ut8krJy9PQ7sGYKhIm9TvIdZiq5xzy
<!--[if !supportLists]-->3. <!--[endif]-->aw8NOLzKZ1k486MePYG4tSuoaxSbwuPLwVUzYFvnUZo7aWCIGKn16UWTM4nxc/+d
<!--[if !supportLists]-->4. <!--[endif]-->wce+bhcKrlLbTWi8l580LTE7GxclTh8z7gHq59ivhaoGbK7FNxlUfB4TSQIDAQAB
<!--[if !supportLists]-->5. <!--[endif]-->AoGBAIgTk0x1J+hI8KHMypPxoJCOPoMi1S9uEewTd7FxaB+4G5Mbuv/Dj62A7NaD
<!--[if !supportLists]-->6. <!--[endif]-->oKI9IyUqE9L3ppvtOLMFXCofkKU0p4j7MEJdZ+CjVvgextkWa80nj/UZiM1oOL6Y
<!--[if !supportLists]-->7. <!--[endif]-->HwH4ZtPtY+pFCTK1rdn3+070qBB9tnVntbN/jq0Ld7f0t7UNAkEA9ryI0kxJL9Pu
<!--[if !supportLists]-->8. <!--[endif]-->pO9NEeWuCUo4xcl9x/M9+mtkfY3VoDDDV1E/eUjmoTfANYwrjcddiQrO0MLyEdoo
<!--[if !supportLists]-->9. <!--[endif]-->tiLpN77qOwJBAPZhtv/+pqMVTrLxWnVKLZ4ZVTPPgJQQkFdhWwYlz7oKzB3VbQRt
<!--[if !supportLists]-->10.<!--[endif]-->/jLFXUyCN2eCP7rglrXnaz7AYBftF0ajHEsCQQDDNfkeQULqN0gpcDdOwKRIL1Pp
<!--[if !supportLists]-->11.<!--[endif]-->kHgWmWlg1lTETVJGEi6Kx/prL/VgeiZ1dzgCTUjAoy9r1cEFxM/PAqH3+/F/AkEA
<!--[if !supportLists]-->12.<!--[endif]-->zsTCp6Q2hLblDRewKq7OCdiIwKpr5dbgy/RQR6CD7EYTdxYeH5GPu1wXKJY/mQae
<!--[if !supportLists]-->13.<!--[endif]-->JV9GG/LS9h7MhkfbONS6cQJAdBEb5vloBDLcSQFDQO/VZ9SKFHCmHLXluhhIizYK
<!--[if !supportLists]-->14.<!--[endif]-->Gzgf3OXEGNDSAC3qy+ZTnLd3N5iYrVbK52UoiLOLhhNMqA==
<!--[if !supportLists]-->15.<!--[endif]-->-----END RSA PRIVATE KEY-----
c)生成公钥
在bin目录下,执行以下命令:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
会在bin目录下看到新生成的公钥文件rsa_public_key.pem,文件内容如下:
<!--[if !supportLists]-->1. <!--[endif]-->-----BEGIN PUBLIC KEY-----
<!--[if !supportLists]-->2. <!--[endif]-->MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDtd1lKsX6ylsAEWFi7E/ut8krJ
<!--[if !supportLists]-->3. <!--[endif]-->y9PQ7sGYKhIm9TvIdZiq5xzyaw8NOLzKZ1k486MePYG4tSuoaxSbwuPLwVUzYFvn
<!--[if !supportLists]-->4. <!--[endif]-->UZo7aWCIGKn16UWTM4nxc/+dwce+bhcKrlLbTWi8l580LTE7GxclTh8z7gHq59iv
<!--[if !supportLists]-->5. <!--[endif]-->haoGbK7FNxlUfB4TSQIDAQAB
<!--[if !supportLists]-->6. <!--[endif]-->-----END PUBLIC KEY-----
常见错误解决方案:
错误1:
Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:252)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at com.jd.health.insurance.soa.common.util.RSAOpenUtil.decryptByPrivateKey(RSAOpenUtil.java:88)
at com.jd.health.insurance.soa.common.util.RSAOpenUtil.decryptByPrivateKey(RSAOpenUtil.java:102)
at com.jd.health.insurance.soa.common.util.RSAOpenUtil.main(RSAOpenUtil.java:143)
Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:351)
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356)
at sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(RSAPrivateCrtKeyImpl.java:130)
at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:80)
at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:357)
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:248)
... 4 more
解决方案://这时候的私钥还不能直接被使用,需要进行PKCS#8编码:
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
命令中指明了输入私钥文件为rsa_private_key.pem,输出私钥文件为pkcs8_rsa_private_key.pem,不采用任何二次加密(-nocrypt)
相关推荐
.NET , RSA非对称加解密源码。让初学者理解非对称加密逻辑。
C#RSA非对称加解密,C#RSA非对称加解密类
RSA非对称加密解密Delphi源码,亲测XE10.2.3可用!RSA控件,内含密钥对生成,无须DLL!
C#RSA非对称加解密DLL; 最近抽空写得一个C#RSA非对称加解密类并已经封装好了。先存在csdn以便以后调用。呵呵
AES对称和RSA非对称加密解密的java实现
RSA非对称加密算法代码,能加解密字符串和数字。测试平台为vs2005.
一, ToolsUtil.java为主要加密解密的工具类。里面的Public.key加密字符,Private.key解密字符方法按项目修改路径。 二, Test为加密数据库用户名和密码,生成完成后可将其赋值到属性文件中。 三, Crypt.java文件...
RSA加解密demo go语言版本,代码简洁,可直接使用,适合用来做非对称加解密应用。也适合用来做算法研究使用。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·...
登录时,用户的密码用明文传输...非对称加密算法常用RSA算法,秘钥使用base64编码成字符串,后端使用jdk8的标准API,前端使用jsencrypt.js进行RSA的对应操作。经过测试,本例中的前后端代码的加密解密计算结果是一致的。
公私钥加解密,内含秘钥获取,亲测可用,且加密字段长度不限
RSA非对称 C#解密、js加密实现登陆密文,传输RSA非对称 C#解密、js加密实现登陆密文传输,RSA非对称 C#解密、js加密实现登陆密文传输
本程序是用RSA算法编写的对照片进行加密
secruity.js jsencrypt.js RSAjs 三种RSA加解密JS,vue的和正常版本的
使用RSA非对称加密完成JavaScript前端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,但是关于如何使用RSA完成前端的组合加密解密,东西就非常少了,并且由于RSA的特性,一...
基于.Net的MVC模拟登录,RSA非对称加密,web前端加密,C#后端解密。
java aes128/256 对称加密解密,rsa对称加密解密验签实现,php java通用aes加密 支持任何形式的aes加密,文件,字符,字节等,内含php代码,可以与php平台实现aes加密,而且包含rsa非对称加密签名验签实现,都是对...
java go RSA互相加解密 go rsa加密后可以用 java解密, java rsa加密后 可以用解密, 要把 txt文件中的秘钥和私钥 都复制粘贴到java 文件和go 文件 ,公钥和私钥统一才可以
此案列是c# RSA非对称加密与解密的demo,其中首先生成 公钥文件与私钥文件,然后与你要加密的串进行相对应的加密与解密
主要介绍了ThinkPHP实现的rsa非对称加密类,结合实例形式分析了thinkPHP引入密钥文件实现rsa加密解密的相关操作技巧,需要的朋友可以参考下
RSA非对称加密 通过私钥加密,公钥解密来实现数据的安全交互。公钥私钥存放在单独的文本中,自己替换即可。