kit.program/kit/test/debug_sm2_public_key.js
2026-04-04 17:54:13 +08:00

46 lines
1.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const sm2 = require('sm-crypto').sm2;
const sm3 = require('sm-crypto').sm3;
console.log('=== 调试 SM2 公钥格式 ===');
// 测试数据
const testData = 'QDJNHHVB_FWQ';
const hash = sm3(testData);
console.log('测试数据:', testData);
console.log('SM3 哈希:', hash);
// 用户提供的签名ASN.1 DER 格式)
const userSignature = '3044022002d3816303ee2a352477f3227070cc34297bd6e89dc86e2c54840fffc92c3b67022066114b6bfacb00408cc51b8c18d02023f50671844372094d9460bd5f85acac50';
// 解析签名
const rStart = 8;
const r = userSignature.substring(rStart, rStart + 64);
const sStart = rStart + 64 + 4;
const s = userSignature.substring(sStart, sStart + 64);
const rawSignature = r + s;
console.log('\n原始签名格式:', rawSignature);
// 用户公钥
const userPublicKey = '04bb7754e559f6d158d52fdc4608244f07f12901363a1d6db8fb3219bf8e827efd11d8f18cf9926cfdd61aaf0eea2429e921b7b94f43ca9b2c89213355ad59e731';
console.log('\n完整公钥:', userPublicKey);
// 去掉 04 前缀
const pubKeyWithoutPrefix = userPublicKey.substring(2);
console.log('去掉前缀的公钥:', pubKeyWithoutPrefix);
// 尝试验证
console.log('\n验证结果:');
try {
const result1 = sm2.doVerifySignature(hash, rawSignature, userPublicKey);
console.log(' 使用完整公钥:', result1);
} catch (e) {
console.error(' 完整公钥错误:', e.message);
}
try {
const result2 = sm2.doVerifySignature(hash, rawSignature, pubKeyWithoutPrefix);
console.log(' 使用去掉前缀的公钥:', result2);
} catch (e) {
console.error(' 去掉前缀错误:', e.message);
}