70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
const sm2 = require('sm-crypto').sm2;
|
|
const sm3 = require('sm-crypto').sm3;
|
|
|
|
console.log('=== 验证用户提供的具体数据 ===');
|
|
|
|
// 用户提供的数据
|
|
const dataHex = '51444A4E484856425F465751';
|
|
const signatureHex = '02D3816303EE2A352477F3227070CC34297BD6E89DC86E2C54840FFFC92C3B6766114B6BFA CB00408CC51B8C18D02023F50671844372094D9460BD5F85ACAC50'.replace(/\s/g, '');
|
|
const userId = '1234567812345678';
|
|
const hashHex = '0F76D50E476E24507187885DF1BC197B48F368F3C03DDF0A5C0C067D2EEF63EE';
|
|
|
|
// 从用户的 PKCS7 签名中提取的公钥
|
|
const publicKeyHex = '04bb7754e559f6d158d52fdc4608244f07f12901363a1d6db8fb3219bf8e827efd11d8f18cf9926cfdd61aaf0eea2429e921b7b94f43ca9b2c89213355ad59e731';
|
|
|
|
// 转换数据
|
|
const data = Buffer.from(dataHex, 'hex').toString('utf8');
|
|
console.log('数据:', data);
|
|
console.log('数据长度:', data.length);
|
|
console.log('签名:', signatureHex);
|
|
console.log('签名长度:', signatureHex.length / 2, '字节');
|
|
console.log('公钥:', publicKeyHex);
|
|
|
|
// 测试不同的验证选项
|
|
console.log('\n测试不同的验证选项:');
|
|
|
|
// 尝试 1: 使用原始数据 + DER + SM3 + userId
|
|
console.log('\n1. 使用原始数据 + DER + SM3 + userId:');
|
|
try {
|
|
const result1 = sm2.doVerifySignature(data, signatureHex, publicKeyHex, { der: true, hash: true, userId });
|
|
console.log(' 验证结果:', result1);
|
|
} catch (e) {
|
|
console.error(' 错误:', e.message);
|
|
}
|
|
|
|
// 尝试 2: 使用哈希 + DER
|
|
console.log('\n2. 使用哈希 + DER:');
|
|
try {
|
|
const result2 = sm2.doVerifySignature(hashHex, signatureHex, publicKeyHex, { der: true });
|
|
console.log(' 验证结果:', result2);
|
|
} catch (e) {
|
|
console.error(' 错误:', e.message);
|
|
}
|
|
|
|
// 尝试 3: 使用原始数据 + DER
|
|
console.log('\n3. 使用原始数据 + DER:');
|
|
try {
|
|
const result3 = sm2.doVerifySignature(data, signatureHex, publicKeyHex, { der: true });
|
|
console.log(' 验证结果:', result3);
|
|
} catch (e) {
|
|
console.error(' 错误:', e.message);
|
|
}
|
|
|
|
// 尝试 4: 直接使用哈希
|
|
console.log('\n4. 直接使用哈希:');
|
|
try {
|
|
const result4 = sm2.doVerifySignature(hashHex, signatureHex, publicKeyHex);
|
|
console.log(' 验证结果:', result4);
|
|
} catch (e) {
|
|
console.error(' 错误:', e.message);
|
|
}
|
|
|
|
// 尝试 5: 直接使用原始数据
|
|
console.log('\n5. 直接使用原始数据:');
|
|
try {
|
|
const result5 = sm2.doVerifySignature(data, signatureHex, publicKeyHex);
|
|
console.log(' 验证结果:', result5);
|
|
} catch (e) {
|
|
console.error(' 错误:', e.message);
|
|
}
|