移动端使用sm-crypto模块中的sm2对数据加密后, 服务端有概率无法正常解密, 其原因在于移动端使用sm2公钥(带有04开头表示非压缩公钥)对数据加密后得到的密文应该带有04开头(非压缩密文), 而实际上加密之后确实有04开头, 只是会出现两种情况,
第一种,04开头表示的是上述的非压缩密文
第二种,04开头是sm-crypto包中sm2工具加密后的密文原文的数据正好是04开头, 而非压缩标识
解决方案:
- 服务端在解密前端的失败时候,不管原文开头是不是04,再加个04,也就是0404开头,重新解密即可
- 服务端对自己加密的内容,判断加密串是否包含04,如果不包含再加个04,解密就好。