寂井浮廊
打赏我
欢迎您: 
游客
   
登录
  发现BUG请联系jintianhu2000@126.com
常用
加解密算法
常用工具
EMV相关
还珠楼论坛
答题闯关
用户信息
帖子列表
语法介绍
帖子详情
RSA PKCS1与PKCS8的区别
jin.th 发布于2019-08-24 22:02
[评论区]
[我要回复]
[下载md文件]
[下载pdf文件]
仅自己可见
两种都是明文证书格式,其实就是把公钥或私钥数据以TLV格式组包,再用base64编码,头尾加上一段固定文本。PKCS8用于JAVA语言。对终端里C语言的使用来说,两者最终都需要解析成RSA的P/Q/N/D等值。 ## 1 RSA公钥 PKCS1格式与PKCS8格式的公钥完全一样。 举例: ``` -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI1yZoH2mC147z5K/9HsnoumTz BOGfiMrkVrqBpdIfQnAKS/2oc7F0LtBsJTjGdsbXShkcac0TixJXBt4myBSMC5d9 0npI4nyVfiXR9tHB5Yh5RxjXVkPwUTyq8+5o28V1y16Qh0chNSUhNt+oEjEjuN2V HpwNKKvWdHkjspvVcQIDAQAB -----END PUBLIC KEY----- ``` 头尾是固定的字符串。中间的BASE64数据解码后得到 ``` 30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00 30 81 89 02 81 81 00 C8 D7 26 68 1F 69 82 D7 8E F3 E4 AF FD 1E C9 E8 BA 64 F3 04 E1 9F 88 CA E4 56 BA 81 A5 D2 1F 42 70 0A 4B FD A8 73 B1 74 2E D0 6C 25 38 C6 76 C6 D7 4A 19 1C 69 CD 13 8B 12 57 06 DE 26 C8 14 8C 0B 97 7D D2 7A 48 E2 7C 95 7E 25 D1 F6 D1 C1 E5 88 79 47 18 D7 56 43 F0 51 3C AA F3 EE 68 DB C5 75 CB 5E 90 87 47 21 35 25 21 36 DF A8 12 31 23 B8 DD 95 1E 9C 0D 28 AB D6 74 79 23 B2 9B D5 71 02 03 01 00 01 ``` TLV解析后得到 ![image](/upload/BBS/aa280e7d-43f3-49b8-803e-319acb97d316.jpg) 前面都是固定TLV数据。`2A 86 48 86 F7 0D 01 01 01`是OBJECT IDENTIFIER(简称OID),表明RSA算法。 所有RSA数据,如果第1字节大于等于0x80,则在TLV数据中会增加1字节0x00。 ## 2 RSA私钥 ### 2.1 PKCS1格式 举例: ``` -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDI1yZoH2mC147z5K/9HsnoumTzBOGfiMrkVrqBpdIfQnAKS/2o c7F0LtBsJTjGdsbXShkcac0TixJXBt4myBSMC5d90npI4nyVfiXR9tHB5Yh5RxjX VkPwUTyq8+5o28V1y16Qh0chNSUhNt+oEjEjuN2VHpwNKKvWdHkjspvVcQIDAQAB AoGBAIGX0oB9RGfZD7Twa1647y/slhb5n1yBt+l+zPm7NcpV5FXAkvyPKoH9cx9V JT1qhwOEHI/o9RsXMc5V8CK2GArfISXItBWoZkECDYk+okqqFFgoclpBs8XUTPbm 2cY3KC25MWb808DavU5p3G8EyOf3jhuJZl7c67pTG5rrKX7BAkEAyiXX939R5H6r rKflMFeHUNxw4gLsm/d8EeknCtqrFVLfdUj6U/4LXPT1m0zD/ZHzLLvaOxRGf0Ml h4wKSl8TfwJBAP5YJOAmqI6gxjh2ZfhKUuobsspWT+vnF+QqFqE0A2lgDrl3tFWb CuiRjkOoDKhI6EmNa1JThMb737c647S6zw8CQAGxgXakTWZRnVSL74KRKSQHRLbP +XVxBEwOHPKdVFOQZyjPXLF5blTwBGKxqO6l21ijljdqexCz2kuhY7CtzTcCQDdL oni47txTR8TuuKyKPAx5iR1ENovq6d7I57KUREmcgJcB10rlMjHtsygyWM4dS6Ly A+saDTvVdoW3X9ni4zECQA1EVnCYHQZcN31MheoHDoFF/g3p7zqYKGM3kSF0xVhT xUHG7XMJa8YmesIbDaz6JHBsz+op0ODEeXrnujkAXJs= -----END RSA PRIVATE KEY----- ``` 头尾是固定的字符串。中间的BASE64数据解码后得到 ``` 30 82 02 5C 02 01 00 02 81 81 00 C8 D7 26 68 1F 69 82 D7 8E F3 E4 AF FD 1E C9 E8 BA 64 F3 04 E1 9F 88 CA E4 56 BA 81 A5 D2 1F 42 70 0A 4B FD A8 73 B1 74 2E D0 6C 25 38 C6 76 C6 D7 4A 19 1C 69 CD 13 8B 12 57 06 DE 26 C8 14 8C 0B 97 7D D2 7A 48 E2 7C 95 7E 25 D1 F6 D1 C1 E5 88 79 47 18 D7 56 43 F0 51 3C AA F3 EE 68 DB C5 75 CB 5E 90 87 47 21 35 25 21 36 DF A8 12 31 23 B8 DD 95 1E 9C 0D 28 AB D6 74 79 23 B2 9B D5 71 02 03 01 00 01 02 81 81 00 81 97 D2 80 7D 44 67 D9 0F B4 F0 6B 5E B8 EF 2F EC 96 16 F9 9F 5C 81 B7 E9 7E CC F9 BB 35 CA 55 E4 55 C0 92 FC 8F 2A 81 FD 73 1F 55 25 3D 6A 87 03 84 1C 8F E8 F5 1B 17 31 CE 55 F0 22 B6 18 0A DF 21 25 C8 B4 15 A8 66 41 02 0D 89 3E A2 4A AA 14 58 28 72 5A 41 B3 C5 D4 4C F6 E6 D9 C6 37 28 2D B9 31 66 FC D3 C0 DA BD 4E 69 DC 6F 04 C8 E7 F7 8E 1B 89 66 5E DC EB BA 53 1B 9A EB 29 7E C1 02 41 00 CA 25 D7 F7 7F 51 E4 7E AB AC A7 E5 30 57 87 50 DC 70 E2 02 EC 9B F7 7C 11 E9 27 0A DA AB 15 52 DF 75 48 FA 53 FE 0B 5C F4 F5 9B 4C C3 FD 91 F3 2C BB DA 3B 14 46 7F 43 25 87 8C 0A 4A 5F 13 7F 02 41 00 FE 58 24 E0 26 A8 8E A0 C6 38 76 65 F8 4A 52 EA 1B B2 CA 56 4F EB E7 17 E4 2A 16 A1 34 03 69 60 0E B9 77 B4 55 9B 0A E8 91 8E 43 A8 0C A8 48 E8 49 8D 6B 52 53 84 C6 FB DF B7 3A E3 B4 BA CF 0F 02 40 01 B1 81 76 A4 4D 66 51 9D 54 8B EF 82 91 29 24 07 44 B6 CF F9 75 71 04 4C 0E 1C F2 9D 54 53 90 67 28 CF 5C B1 79 6E 54 F0 04 62 B1 A8 EE A5 DB 58 A3 96 37 6A 7B 10 B3 DA 4B A1 63 B0 AD CD 37 02 40 37 4B A2 78 B8 EE DC 53 47 C4 EE B8 AC 8A 3C 0C 79 89 1D 44 36 8B EA E9 DE C8 E7 B2 94 44 49 9C 80 97 01 D7 4A E5 32 31 ED B3 28 32 58 CE 1D 4B A2 F2 03 EB 1A 0D 3B D5 76 85 B7 5F D9 E2 E3 31 02 40 0D 44 56 70 98 1D 06 5C 37 7D 4C 85 EA 07 0E 81 45 FE 0D E9 EF 3A 98 28 63 37 91 21 74 C5 58 53 C5 41 C6 ED 73 09 6B C6 26 7A C2 1B 0D AC FA 24 70 6C CF EA 29 D0 E0 C4 79 7A E7 BA 39 00 5C 9B ``` TLV解析后得到 ![image](/upload/BBS/91997c2b-46be-491e-b349-6e025897c699.jpg) 注意公钥模N前有1个空的TAG。 ### 2.2 PKCS8格式 举例: ``` -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMjXJmgfaYLXjvPk r/0eyei6ZPME4Z+IyuRWuoGl0h9CcApL/ahzsXQu0GwlOMZ2xtdKGRxpzROLElcG 3ibIFIwLl33SekjifJV+JdH20cHliHlHGNdWQ/BRPKrz7mjbxXXLXpCHRyE1JSE2 36gSMSO43ZUenA0oq9Z0eSOym9VxAgMBAAECgYEAgZfSgH1EZ9kPtPBrXrjvL+yW FvmfXIG36X7M+bs1ylXkVcCS/I8qgf1zH1UlPWqHA4Qcj+j1GxcxzlXwIrYYCt8h Jci0FahmQQINiT6iSqoUWChyWkGzxdRM9ubZxjcoLbkxZvzTwNq9TmncbwTI5/eO G4lmXtzrulMbmuspfsECQQDKJdf3f1Hkfqusp+UwV4dQ3HDiAuyb93wR6ScK2qsV Ut91SPpT/gtc9PWbTMP9kfMsu9o7FEZ/QyWHjApKXxN/AkEA/lgk4CaojqDGOHZl +EpS6huyylZP6+cX5CoWoTQDaWAOuXe0VZsK6JGOQ6gMqEjoSY1rUlOExvvftzrj tLrPDwJAAbGBdqRNZlGdVIvvgpEpJAdEts/5dXEETA4c8p1UU5BnKM9csXluVPAE YrGo7qXbWKOWN2p7ELPaS6FjsK3NNwJAN0uieLju3FNHxO64rIo8DHmJHUQ2i+rp 3sjnspRESZyAlwHXSuUyMe2zKDJYzh1LovID6xoNO9V2hbdf2eLjMQJADURWcJgd Blw3fUyF6gcOgUX+DenvOpgoYzeRIXTFWFPFQcbtcwlrxiZ6whsNrPokcGzP6inQ 4MR5eue6OQBcmw== -----END PRIVATE KEY----- ``` 头尾是固定的字符串,注意与PKCS1格式的头尾是不同的。中间的BASE64数据解码后得到 ``` 30 82 02 76 02 01 00 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 04 82 02 60 30 82 02 5C 02 01 00 02 81 81 00 C8 D7 26 68 1F 69 82 D7 8E F3 E4 AF FD 1E C9 E8 BA 64 F3 04 E1 9F 88 CA E4 56 BA 81 A5 D2 1F 42 70 0A 4B FD A8 73 B1 74 2E D0 6C 25 38 C6 76 C6 D7 4A 19 1C 69 CD 13 8B 12 57 06 DE 26 C8 14 8C 0B 97 7D D2 7A 48 E2 7C 95 7E 25 D1 F6 D1 C1 E5 88 79 47 18 D7 56 43 F0 51 3C AA F3 EE 68 DB C5 75 CB 5E 90 87 47 21 35 25 21 36 DF A8 12 31 23 B8 DD 95 1E 9C 0D 28 AB D6 74 79 23 B2 9B D5 71 02 03 01 00 01 02 81 81 00 81 97 D2 80 7D 44 67 D9 0F B4 F0 6B 5E B8 EF 2F EC 96 16 F9 9F 5C 81 B7 E9 7E CC F9 BB 35 CA 55 E4 55 C0 92 FC 8F 2A 81 FD 73 1F 55 25 3D 6A 87 03 84 1C 8F E8 F5 1B 17 31 CE 55 F0 22 B6 18 0A DF 21 25 C8 B4 15 A8 66 41 02 0D 89 3E A2 4A AA 14 58 28 72 5A 41 B3 C5 D4 4C F6 E6 D9 C6 37 28 2D B9 31 66 FC D3 C0 DA BD 4E 69 DC 6F 04 C8 E7 F7 8E 1B 89 66 5E DC EB BA 53 1B 9A EB 29 7E C1 02 41 00 CA 25 D7 F7 7F 51 E4 7E AB AC A7 E5 30 57 87 50 DC 70 E2 02 EC 9B F7 7C 11 E9 27 0A DA AB 15 52 DF 75 48 FA 53 FE 0B 5C F4 F5 9B 4C C3 FD 91 F3 2C BB DA 3B 14 46 7F 43 25 87 8C 0A 4A 5F 13 7F 02 41 00 FE 58 24 E0 26 A8 8E A0 C6 38 76 65 F8 4A 52 EA 1B B2 CA 56 4F EB E7 17 E4 2A 16 A1 34 03 69 60 0E B9 77 B4 55 9B 0A E8 91 8E 43 A8 0C A8 48 E8 49 8D 6B 52 53 84 C6 FB DF B7 3A E3 B4 BA CF 0F 02 40 01 B1 81 76 A4 4D 66 51 9D 54 8B EF 82 91 29 24 07 44 B6 CF F9 75 71 04 4C 0E 1C F2 9D 54 53 90 67 28 CF 5C B1 79 6E 54 F0 04 62 B1 A8 EE A5 DB 58 A3 96 37 6A 7B 10 B3 DA 4B A1 63 B0 AD CD 37 02 40 37 4B A2 78 B8 EE DC 53 47 C4 EE B8 AC 8A 3C 0C 79 89 1D 44 36 8B EA E9 DE C8 E7 B2 94 44 49 9C 80 97 01 D7 4A E5 32 31 ED B3 28 32 58 CE 1D 4B A2 F2 03 EB 1A 0D 3B D5 76 85 B7 5F D9 E2 E3 31 02 40 0D 44 56 70 98 1D 06 5C 37 7D 4C 85 EA 07 0E 81 45 FE 0D E9 EF 3A 98 28 63 37 91 21 74 C5 58 53 C5 41 C6 ED 73 09 6B C6 26 7A C2 1B 0D AC FA 24 70 6C CF EA 29 D0 E0 C4 79 7A E7 BA 39 00 5C 9B ``` TLV解析后得到 ![image](/upload/BBS/7cb0ad10-1375-466c-891b-a3d9aa493eaf.jpg) 前面都是固定TLV数据。`2A 86 48 86 F7 0D 01 01 01`是OBJECT IDENTIFIER(简称OID),表明RSA算法。后面的数据与PKCS1完全对应。 PKCS8格式的私钥,其实就是比PKCS1格式多了几个固定的TLV数据,同时base64数据的头尾固定文本也不同。
评论列表
回帖
浙ICP备17051204号