前言
通常我们使用的是标准的PEM证书,PEM证书是OpenSSL的标准格式,详细信息可以百度。
PEM格式信息最大的特点是会带头信息和尾信息。公钥: -----BEGIN PUBLIC KEY----- 、 -----END PUBLIC KEY-----。私钥 -----BEGIN PRIVATE KEY----- 、 -----END PRIVATE KEY-----"
简述下利用openssl生成pem的过程:
1.生成RSA私钥 通常大于512,选择1024或者2048
openssl genrsa -out rsa_private_key.pem 1024
2.需要转换成RSA私钥转换成PKCS8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem-outform PEM -nocrypt
3.生成RSA公钥
openssl rsa -in rsa_private_key.pem-pubout -out rsa_public_key.pem
通过PEM进行加密、解密、签名、验签
java端核心操作流程
1.Java通过RSA对数据进行加密、解密、签名、验签的流程。
1)私钥签名
a)获取私钥
//获取KeyFactory,指定RSA算法
KeyFactorykeyFactory = KeyFactory.getInstance("RSA");
//将BASE64编码的私钥字符串进行解码
BASE64Decoderdecoder = newBASE64Decoder();
byte[] encodeByte = decoder.decodeBuffer(priKey);
//将BASE64解码后的字节数组,构造成PKCS8EncodedKeySpec对象,生成私钥对象
PrivateKeyprivatekey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodeByte));
b)使用私钥,对数据进行签名
//获取Signature实例,指定签名算法(本例使用SHA1WithRSA)
Signaturesignature = Signature.getInstance("SHA1WithRSA");
//加载私钥
signature.initSign(privatekey);
//更新待签名的数据
signature.update(plain.getBytes("UTF-8"));
//进行签名
byte[] signed = signat