公钥生成步骤

Posted by Jason on Sunday, December 16, 2018

TOC

使用OpenSSL生成RSA公私钥

项目中需要用到公私钥实现数字签名、验签,通过下面的命令生成的:

1.openssl genrsa -out rsa_private_key_2048.pem 2048 #生成rsa私钥,X509编码,2048位
2.openssl pkcs8 -in rsa_private_key_2048.pem -out rsa_private_key_2048_pkcs8.pem -nocrypt -topk8 #转换为PKCS#8编码
3.openssl rsa -in rsa_private_key_2048.pem -out rsa_public_key_2048.pem -pubout #导出对应的公钥,X509编码
  • 生成2048位的rsa私钥,默认是X509编码,这一步生成的私钥文件只供第2、3步使用,并没有实际用处;
  • 使用第1步生成的私钥文件生成PKCS#8编码的私钥文件,这一步生成的文件为最终使用的私钥文件;
  • 使用第1步生成的私钥文件生成对应的公钥文件,这一步生成的公钥文件为最终使用的公钥文件;

明文长度限制

RSA算法本身要求加密内容也就是明文长度m必须0<m<密钥长度n。如果小于这个长度就需要进行padding,因为如果没有padding,就无法确定解密后内容的真实长度,字符串之类的内容问题还不大,以0作为结束符,但对二进制数据就很难,因为不确定后面的0是内容还是内容结束符。而只要用到padding,那么就要占用实际的明文长度,于是实际明文长度需要减去padding字节长度。我们一般使用的padding标准有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建议的padding就占用了11个字节。

这样,对于1024长度的密钥。128字节(1024bits)-减去11字节正好是117字节,但对于RSA加密来讲,padding也是参与加密的,所以,依然按照1024bits去理解,但实际的明文只有117字节了。

「真诚赞赏,手留余香」

Jason Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus