摘要
因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端是python做的,所以需要两端的数据能够共通。研究了几天终于搞定了,下面是一些重要的代码以及一些我踩过的坑,分享一下。
欢迎访问我的Github
OpenSSL官网
一. 编译
make
Perl 5
an ANSI C compiler
a development environment in form of development libraries and C
header files
a supported Unix operating system
二. 安装
$ ./config
$ make
$ make test
$ make install
三. 生成密钥
生成的密钥的路径是你当前执行命令的路径
这里默认生成1024长度密钥
公钥是基于私钥来生成的,所以必须先生成私钥
# 进入openssl
root@VM-0-15-ubuntu:/home/ubuntu# openssl
# 生成一个1024位的私钥文件rsa_private_key.pem
OpenSSL> genrsa -out rsa_private_key.pem 1024
# 从私钥中提取公钥rsa_public_key.pem
OpenSSL> rsa -in rsa_private_key.pem -out rsa_public_key.pem -outform PEM -pubout
# 将私钥转换成 DER 格式
OpenSSL> rsa -in rsa_private_key.pem -out rsa_private_key.der -outform der
# 将公钥转换成 DER 格式
OpenSSL> rsa -in rsa_public_key.pem -out rsa_public_key.der -pubin -outform der
# 把RSA私钥转换成PKCS8格式
OpenSSL> pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
# 从私钥创建公钥证书请求
OpenSSL> req -new -key rsa_private_key.pem -out rsa_public_key.csr
# 生成证书并签名(有效期10年)
OpenSSL> x509 -req -days 3650 -in rsa_public_key.csr -signkey rsa_private_key.pem -out rsa_public_key.crt
# 把crt证书转换为der格式
OpenSSL> x509 -outform der -in rsa_public_key.crt -out rsa_public_key.der
# 把crt证书生成私钥p12文件
OpenSSL> pkcs12 -export -out rsa_private_key.p12 -inkey rsa_private_key.pem -in rsa_public_key.crt
1.JAVA端加密
其实单一语言的加解密都还是比较简单的,关键在于跨语言