java sha1withrsa公钥加密_数字签名----sha1withrsa

项目中进行了sha1withrsa数字签名。对此总结一下吧。

浅谈加密与签名

我们一般的加密主要分2种。对称加密。非对称加密。顾名思义。对称加密就是秘钥是一样的。通过同一个秘钥加密解密。这一类的加密算法有DES,3DES,AES等。而非对称加密即使用公钥和秘钥2个。公钥进行加密,而私钥进行解密。这一类的加密算法主要RSA

数字签名并不是加密。他只是将传递的参数进行签名。服务器端可以验签。主要作用有2个:1.保证数据不会被篡改。2.保证请求的确是秘钥持有者发送的。 虽然他不是加密但是这里我们使用到了RSA加密。sha1withrsa顾名思义。是将加密对象进行sha1后进行rsa加密。当然。并不是简单的sha1后就直接rsa。中间有一些处理。具体的细节我不是很了解。也不需要了解除非你对算法极度感兴趣。可以去找找资料弄明白。不管怎样处理。最后我们得到了用rsa秘钥加密后的数据。一般情况下我们会base64成一个字符串,方便传输。这样的字符串就是数字签名了。服务器端只需要用对应的公钥进行验签就可以判断出是不是秘钥持有者发送的消息了。

浅谈rsa秘钥公钥以及pkcs1,pkcs8格式

首先推荐一个在线生成秘钥公钥以及加密解密的网站http://tool.chacuo.net/cryptrsapubkey

自己生成公钥秘钥一般情况下就需要使用openssl工具了。使用工具执行命令genrsa -out rsa_private_key.pem 2048

2048指的是位数。一般情况下1024也够用了。如果要求高点还是2048位更加合适点。生成的pem文件里面以-----BEGIN RSA PRIVATE KEY-----开头-----END RSA PRIVATE KEY-----结尾的字符串。中间的部分才是秘钥的base64字符串.这个是pkcs1格式的。也就是原本的rsa密钥。rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

上面的命令会根据刚刚的私钥生成pkcs8格式的公钥。

如果需要pkcs8个格式的私钥(java就是用pkcs8格式的)需要pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

会打印出来以-----BEGIN PRIVATE KEY-----开头。以-----END PRIVATE KEY-----结尾的私钥。

这里我们需要了解一下pkcs1格式和pkcs8格式的区别和关联:

pkcs1的格式才是原本的rsa的密钥。而pkcs8的格式是在pkcs1的数据上增加一些信息。具体这些信息是什么我并没有去深入了解。我们只需要知道pkcs1和pkcs8之间是可以转换的。以2048位的为例:

公钥 pkcs8 转换为 pkcs1 其实就是将前面的32位去除即可

私钥的转换需要使用openssl

pkcs8转rsa:

openssl rsa -in pkcs8密钥 -out rsa密钥

rsa转pkcs8:

openssl pkcs8 -topk8 -inform PEM -in rsa密钥 -outform PEM -nocrypt -out pkcs8密钥

你可能感兴趣的:(java,sha1withrsa公钥加密)