const sm2 = require('sm-crypto').sm2; console.log('=== 测试公钥格式 ==='); // 测试数据 const data = 'QDJNHHVB_FWQ'; const signature = '02D3816303EE2A352477F3227070CC34297BD6E89DC86E2C54840FFFC92C3B6766114B6BFACB00408CC51B8C18D02023F50671844372094D9460BD5F85ACAC50'; // 完整公钥(带 04 前缀) const fullPublicKey = '04bb7754e559f6d158d52fdc4608244f07f12901363a1d6db8fb3219bf8e827efd11d8f18cf9926cfdd61aaf0eea2429e921b7b94f43ca9b2c89213355ad59e731'; // 去掉 04 前缀的公钥 const publicKeyWithoutPrefix = fullPublicKey.substring(2); console.log('完整公钥:', fullPublicKey); console.log('去掉前缀的公钥:', publicKeyWithoutPrefix); // 测试完整公钥 console.log('\n使用完整公钥:'); try { const result1 = sm2.doVerifySignature(data, signature, fullPublicKey); console.log(' 验证结果:', result1); } catch (e) { console.error(' 错误:', e.message); } // 测试去掉前缀的公钥 console.log('\n使用去掉前缀的公钥:'); try { const result2 = sm2.doVerifySignature(data, signature, publicKeyWithoutPrefix); console.log(' 验证结果:', result2); } catch (e) { console.error(' 错误:', e.message); } // 测试带哈希选项 console.log('\n使用去掉前缀的公钥 + 哈希:'); try { const result3 = sm2.doVerifySignature(data, signature, publicKeyWithoutPrefix, true); console.log(' 验证结果:', result3); } catch (e) { console.error(' 错误:', e.message); }