JuneAndGreen / sm-crypto

国密算法js版
MIT License
894 stars 245 forks source link

生成的密钥对结构和java的不一样 #92

Closed xlei1123 closed 9 months ago

xlei1123 commented 11 months ago

js实现的

const keypair = sm2.generateKeyPairHex(appId);
const publicKey = keypair.publicKey; // 公钥
const privateKey = keypair.privateKey; // 私钥

java实现的

//使用标准名称创建EC参数生成的参数规范
        final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");

        // 获取一个椭圆曲线类型的密钥对生成器
        final KeyPairGenerator kpg;
        try {
            kpg = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());
            // 使用SM2算法域参数集初始化密钥生成器(默认使用以最高优先级安装的提供者的 SecureRandom 的实现作为随机源)
            // kpg.initialize(sm2Spec);

            // 使用SM2的算法域参数集和指定的随机源初始化密钥生成器
            kpg.initialize(sm2Spec, new SecureRandom());

            // 通过密钥生成器生成密钥对
            return kpg.generateKeyPair();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

两边生成的密钥对结构不一样,sm-crypto有能实现一样的嘛

JuneAndGreen commented 11 months ago

你可以对比一下实现逻辑和参数看看差异在哪:https://github.com/JuneAndGreen/sm-crypto/blob/master/src/sm2/utils.js#L38

varlinor commented 10 months ago

如果是hutool在后端生成的密钥,可以参考下这个https://blog.csdn.net/qq_33140565/article/details/113818235 真就是要换种方式获取私钥,另外,用hex,别用base64格式的,解密的时候初始化直接报错