收藏
回答

国密算法 sm2,微信小程序端加密后,后端解密不了?

通过微信小程序接入 国密算法SM2,cipherMode=0 (c1c2c3) , utf8 编码, 使用相同的公钥和私钥,下面两种情况:
----------------------------------------------------
【测试1】
1. 在 小程序端 加解密都正常。
2. 小程序端 生成的密文在 后端 解密失败。

——————————————————————————————————————————
【测试2】
1. 在 后端 加解密都正常。
2. 后端 生成的密文在 小程序端 解密失败。

----------------------------------------------------------------------------------




★★★★ 麻烦官方解答一下,或者出一个后端解密的demo ★★★★


回答关注问题邀请回答
收藏

3 个回答

  • Charles
    Charles
    2021-04-26

    我看了源码,但是js和后端有差别,我暂时也是不知道咋改。现在的问题大概是这样的:

     微信小程序端,虽然生成的公钥有130位,但是实际加密时,公钥取的后128位,我表示一脸茫然:
    

    解密的时候,密文一般会以130位作为分割,但小程序端却以64位进行分割,我也是不知所措:
    

    ----------------------------------------------------------------------------

    如果说只是这些数字的改动,倒也好说。

    我修改后端加密算法,加密时取公钥的后128位,结果是,加密失败,直接抛出异常。

    ---------------------------------------------------------------------------

    然后,我继续搜索了不同语言对SM2的后端接口封装,发现都是完整公钥进行加密,解密均以130位进行分割。

    ---------------------------------------------------------------------------

    官方推荐这个国密算法,又对其进行特殊处理,无法与后端进行交互。

    那推荐这个算法的意义是啥,仅允许小程序端自己加解密玩么?



    2021-04-26
    有用
    回复 1
    • 影
      2023-05-11
      大胸弟,后面解决了嘛,我也碰到了😭
      2023-05-11
      回复
  • 阿北
    阿北
    2021-04-26

    很可能是前后端的算法细节处理有哪里不一样

    2021-04-26
    有用
    回复
  • dreamhunter
    dreamhunter
    2021-04-26

    没做encode吧?

    2021-04-26
    有用
    回复 2
    • Charles
      Charles
      2021-04-26
      加密后的结果encode?
      2021-04-26
      回复
    • dreamhunter
      dreamhunter
      2021-04-27回复Charles
      是的,你们可以试下。有可能特殊字符串截断了
      2021-04-27
      回复
登录 后发表内容