美文网首页
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公私钥转换

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