这段时间接了银行的接口,银行的加密一般都比较复杂繁琐,今天就记录下sha1withRSA从秘钥生成到代码如何使用。
生成秘钥文件我是用的是linux里的openssl,安装和生成命令如下:
#安装openssl
yum -y install openssl openssl-devel
#生成私钥
openssl genrsa -out rsa_private_key.pem 2048
#生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
#将私钥从pkcs1格式转换为pkcs8格式,这个命令必须使用,因为java只支持pkcs8
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_rsa_private_key.pem
执行完命令后,当前目录下应该有三个文件pkcs8_rsa_private_key.pem、rsa_private_key.pem、rsa_public_key.pem,其中pkcs8_rsa_private_key.pem和rsa_public_key.pem文件是项目中需要使用的,rsa_private_key.pem文件也需要妥善保管,因为这个才是真实的秘钥原文件,而pkcs8_rsa_private_key.pem是加工过的文件,将三个文件down下来妥善保管。
下面是java实例代码,一般情况下我都是在系统里加个properties文件用来存公钥和私钥的字符串,公钥和私钥文件用文本打开后去掉头尾复制,粘贴后要注意去掉换行符(如果有的话),如下代码所示。
import java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
impo