GMObjC icon indicating copy to clipboard operation
GMObjC copied to clipboard

SM2加密后是30开头的,但是后台需要04开头的 这个可以转换么

Open yushenNO1 opened this issue 1 year ago • 8 comments

yushenNO1 avatar Apr 14 '23 07:04 yushenNO1

将密文 ASN1 解码即可,查看 Readme 文档或 Demo 示例。

// ASN1 解码
NSString *c1c3c2Result1 = [GMSm2Utils asn1DecodeToC1C3C2:enResult1]; // 解码为 c1c3c2字符串
NSArray<NSString *> *c1c3c2Result2 = [GMSm2Utils asn1DecodeToC1C3C2Array:enResult2]; // 解码为 @[c1,c3,c2]
NSData *c1c3c2Result3 = [GMSm2Utils asn1DecodeToC1C3C2Data:enResult3]; // 解码为 c1c3c2拼接的Data

muzipiao avatar Apr 14 '23 10:04 muzipiao

04 代表非压缩格式,解码出来默认不带 04,后端需要,手动拼接加上 04 即可。

muzipiao avatar Apr 14 '23 10:04 muzipiao

这个解出来和后台的的对不上 麻烦可以帮我看下是哪有有问题么 初始公钥: 04653b7ea84362e5d01386d60cd2976226df3ede1d10d5efd583e2e671cd78bb5c39298c38d611f058451331de8b52d3befffa9ede3734e54d696903a84033cdcf 初始私钥: 2cac75851ed2e9ac993a3210eb770435a85d32f1b9047fb738bdfdaaf4efd2e6 加密后公钥:04d69318ad20b99cdd9e823c220bd3cc06652060abb3e99638aba4e1c97d9a409c21de35cd72a8a41ff009419734c943515abcaba81358a734b3f55842f19755b1f36dd67d293263df9fc3d96a35653853bb36e36521d8c1f8102fa6ef5944cf91a37bdd1552a5e309b14bf13bf8565eee7c37c4dd9b7468656de363a7b109a71a3de9d179f004f71aa37532913ea0375529e91e7f3674662fee864dfa625b96fff619d17cf179e01d65376e4373c7c65bf8e86b17dd887ea3c290d16ce60a0dc5e9df522b77bd8f0914eb283277b0faecb4373f8a3c4ade3b68e510602e5c65c637ce 加密后私钥:04b397e89cccdc8a70aae1044c13d9d0d8d721e05441e547b1e9d5ef6c2ded3738bc397d8e8fcd279e3c5bf43d57d6b6decdc504311c44e92f8182869fc15d2d9ade1e508e29ff7f9104351da2d1e34e5cf3e86c8623d55dc45a8b38224873ce9a8801be0de182182019eaabdfa7ffd6c63aeb9380d698d7505eb2982c9668e620cfa30d59af3c66ceaf7e26f6aad4622c82db5e73a7c8cd9de840d77c316299a4 解密后公钥: 0420982890d70746c92c7d4b5216f7b54816c1cd8b7f1653d5d790eb472edb70b506760dfa10009d4068479dc0d05d75e8ce74f1741c93c645755ae361a93221de 解密后私钥: 203fce2a3a29e36dad7eda93d2ea9930888343c970a04f599ec764b8d5fbe53b

yushenNO1 avatar Apr 14 '23 10:04 yushenNO1

加密后公钥: 加密后私钥: 这俩是什么意思,密钥还需要加密吗?那加密密钥用的是什么

muzipiao avatar Apr 14 '23 10:04 muzipiao

初始公钥: ==> 公钥 初始私钥: ==> 私钥

加密后公钥:==> 加密密文 加密后私钥:==> 加密密文

解密后公钥: ==> 结果 解密后私钥: ==> 结果

yushenNO1 avatar Apr 14 '23 10:04 yushenNO1

解密后公钥: ==> 结果 解密后私钥: ==> 结果

这两个是密文解密后预期结果

yushenNO1 avatar Apr 14 '23 10:04 yushenNO1

  1. 没有私钥加密这个说法:公钥加密,私钥解密;私钥签名,公钥验签;
  2. 公钥加密结果 04d693.......5c637ce 明显是没有经过 ASN1 编码的,而 OpenSSL 加解密都是 ASN1 编码格式的密文;
  3. 所以,无非是没有进行 ASN1 编码问题,把 04d693.......5c637ce 前面的 04 标志去掉,进行 ASN1 编码,送入解密即可。
  4. 签名类似,注意 ASN1 编码和 04 标志即可。
NSString *priKey = @"2cac75851ed2e.....8bdfdaaf4efd2e6";
NSString *cipertext = @"d69318ad20b99......e5c65c637ce";
NSString *ciperAsn1 = [GMSm2Utils asn1EncodeWithC1C3C2:cipertext];
NSString *plaintext = [GMSm2Utils decryptToText:ciperAsn1 privateKey:priKey];
NSLog(@"解密结果==%@", plaintext);

muzipiao avatar Apr 14 '23 14:04 muzipiao

好的,谢谢

yushenNO1 avatar Apr 15 '23 04:04 yushenNO1