V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lifesimple
V2EX  ›  问与答

前端怎么 sm2 解密后端加密的数据数据,找到个 sm-crypto 好像不太行

  •  
  •   lifesimple · 2020-08-31 16:22:47 +08:00 · 1418 次点击
    这是一个创建于 1553 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后端会返回私钥和密文 前端解密显示。 demo: 私钥:71116124351000086120885615156312028545284142992533077116972523515775491781478 密文:045CF42905BF516E3AD2BB4D4AF5F699583740FB0AD7727D4D07969E828EF5E7CBE0863775409AE8DC6FC1C5EE138BB57D743C8B1B3531C758568A77CC1EAD4062D3F79B7935C7158206D24B4710C16428DA1F74028259F1A655F5

    sm-crypto 地址: https://npm.runkit.com/sm-crypto

    var sm2 = require("sm-crypto").sm2
    
    
    let keypair = sm2.generateKeyPairHex()
    
    publicKey = keypair.publicKey // 公钥
    privateKey = keypair.privateKey // 私钥
    
    console.log(publicKey, privateKey);
    
    const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为 1
    
    let encryptData = sm2.doEncrypt('hello world123', publicKey, cipherMode) // 加密结果
    let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果
    
    
    console.log(encryptData, decryptData);
    

    如果是前端自己去生成的话,需要一个生成配对的公私钥,然后才行。就现在的需求,后端用他的 sm2 加密算法加密生成了私钥+密文,然后我前端好像没法去做这个配对吧,也没法解出来。

    3 条回复    2020-08-31 20:13:33 +08:00
    qwerthhusn
        1
    qwerthhusn  
       2020-08-31 17:43:02 +08:00   ❤️ 1
    SM2 是类似 ECC 的一个非对称加密
    私钥加密的数据要用公钥解密
    rayjoy
        2
    rayjoy  
       2020-08-31 17:49:42 +08:00   ❤️ 1
    SM2 可以用私钥生成公钥,一般情况是公钥加密,私钥解密。你这个私钥直接在前端使用的操作很让人不可理解,私钥要放在不可被人获取的地方。
    lifesimple
        3
    lifesimple  
    OP
       2020-08-31 20:13:33 +08:00
    @rayjoy 哦哦 好的 学习了,前后端对这个都不是很熟悉。谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2590 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.