Java 與 Python 國密演算法 SM2 互動使用(qbit)

qbit 發表於 2023-01-11
Python Java 演算法

前言

原因

  • 開始 hutool 這樣生成的金鑰,gmssl 死活通不過簽名校驗

    SM2 sm2 = new SM2();
    sm2.setMode(SM2Engine.Mode.C1C2C3);
    sm2.setDigest(new SM3Digest());
    privateKey = HexUtil.encodeHexStr(sm2.getPrivateKey().getEncoded())
    publicKey = HexUtil.encodeHexStr(sm2.getPublicKey().getEncoded())
  • hutool 正確生成金鑰的方式

    privateKey = HexUtil.encodeHexStr(sm2.getD())
    publicKey = HexUtil.encodeHexStr(sm2.getQ(false))  // 公鑰不壓縮
    // 等價於
    privateKey = HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(sm2.getPrivateKey()))
    publicKey = HexUtil.encodeHexStr(((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false))
本文出自 qbit snap