验证失败
This commit is contained in:
+16
-34
@@ -380,55 +380,37 @@ function verifyPKCS7WithJsrsasign(base64Data, verifyData) {
|
||||
// 计算 SM3 哈希
|
||||
const hash = sm3(verifyData.toString())
|
||||
|
||||
// 转换签名格式:从 ASN.1 DER 格式转换为原始 r|s 格式
|
||||
// 签名格式:用户提供的是 ASN.1 DER 格式,需要使用 der: true 选项
|
||||
let signatureHex = signer.sighex
|
||||
if (signatureHex.startsWith('30')) {
|
||||
// ASN.1 DER 格式: 30 44 02 20 [r] 02 20 [s]
|
||||
try {
|
||||
const rStart = 8 // 30440220
|
||||
const r = signatureHex.substring(rStart, rStart + 64) // 32字节 = 64 hex 字符
|
||||
const sStart = rStart + 64 + 4 // 0220
|
||||
const s = signatureHex.substring(sStart, sStart + 64) // 32字节 = 64 hex 字符
|
||||
signatureHex = r + s
|
||||
} catch (e) {
|
||||
// 如果解析失败,使用原始签名
|
||||
}
|
||||
}
|
||||
|
||||
// 使用 SM2 验证签名 (注意:使用 doVerifySignature,不是 doVerify)
|
||||
// 尝试不同的选项组合
|
||||
// 尝试不同的选项组合,包括 userId
|
||||
const userId = '1234567812345678' // 默认 userId
|
||||
|
||||
try {
|
||||
// 尝试 1: 直接验证
|
||||
const result1 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex)
|
||||
// 尝试 1: 使用原始数据 + DER + SM3 + userId
|
||||
const result1 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { der: true, hash: true, userId })
|
||||
if (result1) return true
|
||||
|
||||
// 尝试 2: 使用 DER 格式
|
||||
const result2 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { der: true })
|
||||
// 尝试 2: 使用原始数据 + DER + SM3
|
||||
const result2 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { der: true, hash: true })
|
||||
if (result2) return true
|
||||
|
||||
// 尝试 3: 使用 SM3 哈希
|
||||
const result3 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { hash: true })
|
||||
// 尝试 3: 使用原始数据 + DER
|
||||
const result3 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { der: true })
|
||||
if (result3) return true
|
||||
|
||||
// 尝试 4: 同时使用 DER 和 SM3
|
||||
const result4 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { der: true, hash: true })
|
||||
// 尝试 4: 使用哈希 + DER + SM3 + userId
|
||||
const result4 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { der: true, hash: true, userId })
|
||||
if (result4) return true
|
||||
|
||||
// 尝试 5: 直接使用原始数据而不是哈希
|
||||
const result5 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex)
|
||||
// 尝试 5: 使用哈希 + DER + SM3
|
||||
const result5 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { der: true, hash: true })
|
||||
if (result5) return true
|
||||
|
||||
// 尝试 6: 使用原始数据 + DER
|
||||
const result6 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { der: true })
|
||||
// 尝试 6: 使用哈希 + DER
|
||||
const result6 = sm2.doVerifySignature(hash, signatureHex, publicKeyHex, { der: true })
|
||||
if (result6) return true
|
||||
|
||||
// 尝试 7: 使用原始数据 + SM3
|
||||
const result7 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { hash: true })
|
||||
if (result7) return true
|
||||
|
||||
// 尝试 8: 所有选项
|
||||
const result8 = sm2.doVerifySignature(verifyData.toString(), signatureHex, publicKeyHex, { der: true, hash: true })
|
||||
if (result8) return true
|
||||
} catch (e) {
|
||||
// 忽略错误,继续尝试其他选项
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user