muzipiao / GMObjC

SM2/SM3/SM4/ECDH crypto library based on OpenSSL.
https://muzipiao.github.io/2019/08/iOS-%E4%BD%BF%E7%94%A8-SM2-SM4-%E5%8A%A0%E8%A7%A3%E5%AF%86-SM2-%E7%AD%BE%E5%90%8D%E9%AA%8C%E7%AD%BE%E5%8F%8A-SM3-%E6%91%98%E8%A6%81/
MIT License
346 stars 88 forks source link

使用GMSm2Utils加密无效 #85

Closed YuZeDaGeGe closed 2 months ago

YuZeDaGeGe commented 10 months ago

GMObjc 是不是和某些三方库有冲突呀? 我现在使用后无法加密,

muzipiao commented 10 months ago

你项目中可能存在旧版本的 OpenSSL,将 GMObjC 编译为动态库,拖入项目,记得将动态库选择 Embed & Sign,试试看

# 安装 carthage
brew update && brew install carthage
# 创建 Cartfile 文件,并写入文件 github "muzipiao/GMObjC"
touch Cartfile && echo 'github "muzipiao/GMObjC"' >> Cartfile
# 拉取编译为动态库,在当前执行命令目录下 Carthage/Build/iOS/ 可找到 GMObjC.framework
carthage update --use-xcframeworks
YuZeDaGeGe commented 10 months ago

你好 根据您提示的操作 现在可以加密了 但是后台java解析不了 这是为什么啊 我转成c1c3c2 前面增加04 也解析不了 这是为什么啊

muzipiao commented 10 months ago

这个需要你和后台协商一致了,后端需要什么样的格式,你传什么样的格式就行; GMObjC 与 Java 端 bouncycastle 库做过测试,应该没什么问题,大概率是格式问题。

YuZeDaGeGe commented 10 months ago

您好 , 我现在这个加密格式 使用的是C1C3C2 后台也是这样的格式 但是就是解不开 。 // public key NSString pubKey = @"04238e83bdd7232cc8d629cc729bc9ab8c3b2fbc6bc02215974b84dfe6608929357e63affd2a8ed701a1b1a1b4f1765c89655e7f930bda566cfdf1ade7957168fa"; // private key NSString prikey = @"dfd9f517a121f67565957383d44a5e032dbd868f1eff0f02cda8b17e69bd08a7"; NSString plaintext = @"123456"; // ordinary plaintext NSString enResult1 = [GMSm2Utils encryptText:plaintext publicKey:pubKey]; NSString *c1c3c2Result = [GMSm2Utils asn1DecodeToC1C3C2:enResult1];

NSLog(@"%@",[NSString stringWithFormat:@"04%@",c1c3c2Result]); 输出为(EBE53424FFEDA9F86F7F202393F233DE8A0CEC9917525337B7274B48A4E74D528E44C74D47D0C46EF2C2690871B4B3C95934F629490E3422D5451B538AA7A557C4CE79AA8993DC7700BF882E98BDB78B1B8920C3EA98A7D605D0BBFB83BF217BEF83836CDDB4)

java加密123456 输出为(9e62bd4ddf639c368a011da8c53654fa9158f80aaccf92a47861d46415dd53e12904b0f10aeee6d7eace37a44143582bef92f644162df65b2ffb288c9197669c7580d96d5d0a9114d75399ae4978a98d4f842b289385f2944eb4d550ca04cfbc600460268363)

为什么我的是大写字母 java都是小写字母 请帮我看一下谢谢

muzipiao commented 10 months ago

肯定有些地方未协商一致,例如C1C2C3排列顺序,Hash算法等等; 你加密的结果在线网站可以正常解密,Java端无法解密,可利用在线网站排查原因。 https://the-x.cn/cryptography/Sm2.aspx SM2算法原理,可参考 https://webencrypt.org/sm2/