美文网首页
polarssl和Java端RSA公私钥转换

polarssl和Java端RSA公私钥转换

作者: lichao666 | 来源:发表于2020-09-11 14:31 被阅读0次

背景

polarssl库是C语言的加密库,包括RSA加解密,签名验签等功能。
Java端也有自己专门做加解密,验签的包。
只是针对RSA来说,两端保存公私钥的方式不一样,如下:

//Java端
//公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAr11xfg4P35Z9olhK0Lb7sZOO
V9pzDBXyU3QVmnfJFYj4L1DApI1xPVrekTCxzk319GvHZqdxoR7CbYH2mUAu9Sd0
K4AmdzvKKfnzRyp1VGMmKJ+Yu1rJ2GsSfmt7/Z/NZt/gcx0UjVOWWl67yVRtoSd8
AGMChe39w6VGInzmdQIDAQAB
-----END PUBLIC KEY-----
//私钥
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDAr11xfg4P35Z9olhK0Lb7sZOOV9pzDBXyU3QVmnfJFYj4L1DA
pI1xPVrekTCxzk319GvHZqdxoR7CbYH2mUAu9Sd0K4AmdzvKKfnzRyp1VGMmKJ+Y
u1rJ2GsSfmt7/Z/NZt/gcx0UjVOWWl67yVRtoSd8AGMChe39w6VGInzmdQIDAQAB
AoGACC6KHRButW2CPOR2CPs9gd4uTKbeBPDtmk7BM6JNqtFfcbZvSzbRi2OWZl6r
lCk/9eKClG1/TQZmls1CmFTf55ZZPooxDU2Q6uFPHKZYamb2bKlK3f931hg6+q1P
4mvTgKXo8Su4ODfofwLsMiWhIkxOhcMIex9mSQlw4SaQ3YMCQQDhU1nfzXPcB9A+
EL7AsjwgtvOeS1ACQJedExo7tlTSVY8tV3Rtm2W8wvcjO/TB9r8LDi6VcKAo80WR
zwdTcqFrAkEA2up7hbymEa88ZV9fmNjHDN4jU4eaw9HC+dp8LopPGuwfJ5YHiRDn
2oquM8oquAMHq9dGro3p/JB1Zw/yafgvnwJBAMXoCbZSpAKMMlFxL7ncUoeBaXSN
PZbc2M2zq4Tq3pFnaLwwZiinJrKmo56k2JNMf/vb1vqW03VkRqSMrCiVNEUCQQDZ
ZxwciGh0D47vLXQGmuGyibiTb4vnBB2Ze7zvizNcDTozWe9J05wtkKPHkvIxo/Cu
WzA6kXzZ8axmGZQoYO0JAkBnQrR09eZ03ClVjyIeWIWFSICfElPxUMa39IxRNM0D
MmHF6srKe6X2T8lMT7BHsFAUPIQl1OJEGK4MdzrPMNaW
-----END RSA PRIVATE KEY-----
//polarssl
#define RSA_N   "9292758453063D803DD603D5E777D788" \
                "8ED1D5BF35786190FA2F23EBC0848AEA" \
                "DDA92CA6C3D80B32C4D109BE0F36D6AE" \
                "7130B9CED7ACDF54CFC7555AC14EEBAB" \
                "93A89813FBF3C4F8066D2D800F7C38A8" \
                "1AE31942917403FF4946B0A83D3D3E05" \
                "EE57C6F5F5606FB5D4BC6CD34EE0801A" \
                "5E94BB77B07507233A0BC7BAC8F90F79"

#define RSA_E   "10001"

#define RSA_D   "24BF6185468786FDD303083D25E64EFC" \
                "66CA472BC44D253102F8B4A9D3BFA750" \
                "91386C0077937FE33FA3252D28855837" \
                "AE1B484A8A9A45F7EE8C0C634F99E8CD" \
                "DF79C5CE07EE72C7F123142198164234" \
                "CABB724CF78B8173B9F880FC86322407" \
                "AF1FEDFDDE2BEB674CA15F3E81A1521E" \
                "071513A1E85B5DFA031F21ECAE91A34D"

#define RSA_P   "C36D0EB7FCD285223CFB5AABA5BDA3D8" \
                "2C01CAD19EA484A87EA4377637E75500" \
                "FCB2005C5C7DD6EC4AC023CDA285D796" \
                "C3D9E75E1EFC42488BB4F1D13AC30A57"

#define RSA_Q   "C000DF51A7C77AE8D7C7370C1FF55B69" \
                "E211C2B9E5DB1ED0BF61D0D9899620F4" \
                "910E4168387E3C30AA1E00C339A79508" \
                "8452DD96A9A5EA5D9DCA68DA636032AF"

#define RSA_DP  "C1ACF567564274FB07A0BBAD5D26E298" \
                "3C94D22288ACD763FD8E5600ED4A702D" \
                "F84198A5F06C2E72236AE490C93F07F8" \
                "3CC559CD27BC2D1CA488811730BB5725"

#define RSA_DQ  "4959CBF6F8FEF750AEE6977C155579C7" \
                "D8AAEA56749EA28623272E4F7D0592AF" \
                "7C1F1313CAC9471B5C523BFE592F517B" \
                "407A1BD76C164B93DA2D32A383E58357"

#define RSA_QP  "9AE7FBC99546432DF71896FC239EADAE" \
                "F38D18D2B2F0E2DD275AA977E2BF4411" \
                "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \
                "A74206CEC169D74BF5A8C50D6F48EA08"

有一个项目,是和服务器通信,要对数据做签名和验签。
我做Android端,要求公私钥签名这些对安全有要求的东西放到jni中做,polarssl是我们常用的东西。
但是服务端的同事给了我Java端那种公私钥,就是一串base64编码的字符串。
当时我就很疑惑怎么把密钥放到polarssl中。
然后和其他同事商量这个事,他说Java的密钥是不是asn1编码,听到句话,我就豁然开朗。
直接开干,用ASN1View工具看Java端的密钥,发现Java的密钥果然是Asn1编码,用工具看就直接对应着密钥的属性。

Java私钥转换到polarssl的过程

  • 将Java私钥开头和末尾的内容去掉(----线里面的东西),然后保存到txt文档中,并用asn1view查看


    1.png

    前面的是OID什么的,最后一个OCTET STRING是真正的内容,也有的密钥用工具看时直接是STRING里的内容,
    上面那个例子就是这样的

  • 把OCTET STRING中的内容拷贝出来,转成Base64格式,再用asn1view工具查看


    2.png

    对应的Integer就是N,E,D,P,DP,DQ,QP那些,直接拷贝出来复制到polarssl中即可使用。

上面Java的密钥和Polarssl中的密钥是不对应的,需要密钥的话就按上面的操作试试吧。

相关文章

  • polarssl和Java端RSA公私钥转换

    背景 polarssl库是C语言的加密库,包括RSA加解密,签名验签等功能。Java端也有自己专门做加解密,验签的...

  • Java RSA加密/解密

    Java RSA加密&解密如下: 拿到RSA 公钥和私钥后我们可以保存到文件中,代码如下: 解析已有的公钥和私钥,...

  • iOS RSA加密与解密 签名与验签(附Java端处理)

    本篇文章将涉及以下几个操作:1、iOS端使用RSA公钥加密,iOS端使用RSA私钥解密。2、iOS端使用RSA私钥...

  • RSA和AES结合方案

    client端1.server端生成RSA公钥和私钥对,通过api将公钥返回给client端2.client端自己...

  • openssl RSA密钥格式PKCS1和PKCS8相互转换

    RSA私钥格式PKCS1和PKCS8相互转换 RSA公钥格式PKCS1和PKCS8相互转换 以下转换基于opens...

  • https的加密原理

    服务器端用非对称加密(RSA)生成公钥和私钥然后把公钥发给客户端, 服务器则保存私钥客户端拿到公钥后, 会生成一个...

  • Mac SSH免密登陆Centos

    在Mac客户端命令行生成公钥和私钥cd ~/.sshssh-keygen -t rsa // rsa 是以后生成的...

  • iOS面试题:HTTPS的加密原理

    原文:iOS面试题大全 服务器端用非对称加密(RSA)生成公钥和私钥 然后把公钥发给客户端, 服务器则保存私钥 客...

  • ssh免密登陆

    第一步 在客户端生成公钥和私钥 id_rsa放在本地的公钥,id_rsa.pub放在服务器的私钥 第二步 上传id...

  • ssh 免密码登录

    1. 在客户端生成公钥和私钥 一路默认 回车即可完成后,会在~/.ssh/下生成公私钥 id_rsa (私钥)id...

网友评论

      本文标题:polarssl和Java端RSA公私钥转换

      本文链接:https://www.haomeiwen.com/subject/leavektx.html