const forge = require('node-forge'); const mockP7Sign = `-----BEGIN PKCS7----- MIIDNwYJKoZIhvcNAQcCoIIDKDCCAyQCAQExDzANBglghkgBZQMEAgEFADA8Bgkq hkiG9w0BBwGgLwQtVGhpcyBpcyB0aGUgdGVzdCBjb250ZW50IGZvciBQS0NTNyBz aWduYXR1cmUuoIIB5jCCAeIwggFLoAMCAQICAQEwDQYJKoZIhvcNAQELBQAwNzEZ MBcGA1UEAxMQdGVzdC5leGFtcGxlLmNvbTEaMBgGA1UEChMRVGVzdCBPcmdhbml6 YXRpb24wHhcNMjYwNDA0MDAxMDIyWhcNMjcwNDA0MDAxMDIyWjA3MRkwFwYDVQQD ExB0ZXN0LmV4YW1wbGUuY29tMRowGAYDVQQKExFUZXN0IE9yZ2FuaXphdGlvbjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1e+05xb8T3Lo2v9MZQen5HYffpnc yY9mnT/ygvfxZNM9TeYkq4fACiuS99FONnlHFQdlXEPJluIk1NBFUoLpehAbzOSY Fu0WEjBOVJIg9FIWm7TUojU8yvPsfPGFYTEGEOGAse8AfHw4pl+w5SvxQUF8f2jB XsRY0MrDyb07xC8CAwEAATANBgkqhkiG9w0BAQsFAAOBgQAOEttx/p3xosIm/8sM kIaxR2c/fbYoMbBsX+geaiRu+xNOItbtQpGOhW6Ql981c3EwIjyd34KavplofZIr Slj4jHQFySZaJkegHY+LCAQz9GEg2TMke3MsPJ7nSZS7MUqB2AQt1tLuiXUuRh3V jF4yiqi6lGVmvPJf+y1GXk47KjGB5TCB4gIBATA8MDcxGTAXBgNVBAMTEHRlc3Qu ZXhhbXBsZS5jb20xGjAYBgNVBAoTEVRlc3QgT3JnYW5pemF0aW9uAgEBMA0GCWCG SAFlAwQCAQUAMA0GCSqGSIb3DQEBAQUABIGAMxSC81vzjSiZcJTcSicgCG9879mu p/bikqdHZPyF8UgABjikXXoVJ9IClFRd5/3wRf8ez+hwnxKR8j1vAsDI7U6dXJtr wp0aO7Ua6ecKhI5V0F8nUg5CjEK9FR8vNg0Il8U5AXDuan0iYKvguhWkiuJlvQlV X9ncPP4VRERPw8U= -----END PKCS7-----`; const originalData = 'This is the test content for PKCS7 signature.'; try { const p7 = forge.pkcs7.messageFromPem(mockP7Sign); console.log('=== PKCS7 信息 ==='); console.log('type:', p7.type); console.log('content:', p7.content ? p7.content.getBytes() : 'null'); console.log('certificates count:', p7.certificates ? p7.certificates.length : 0); if (p7.certificates && p7.certificates.length > 0) { const cert = p7.certificates[0]; console.log('cert subject:', cert.subject.attributes.map(a => `${a.name}=${a.value}`).join(', ')); } console.log('\n=== 尝试验证 ==='); try { // 尝试验证 const result = p7.verify(); console.log('verify() result:', result); } catch (e) { console.log('verify() error:', e.message); } // 手动验证 console.log('\n=== 手动验证 ==='); const md = forge.md.sha256.create(); md.update(originalData, 'utf8'); const digest = md.digest().getBytes(); console.log('calculated digest (hex):', forge.util.bytesToHex(digest)); // 获取签名 if (p7.rawCapture && p7.rawCapture.signature) { console.log('signature length:', p7.rawCapture.signature.length); console.log('signature (hex):', forge.util.bytesToHex(p7.rawCapture.signature).substring(0, 100) + '...'); } // 获取公钥 if (p7.certificates && p7.certificates.length > 0) { const publicKey = p7.certificates[0].publicKey; if (publicKey) { console.log('publicKey exists:', true); // 尝试用公钥验证 try { const verified = publicKey.verify(digest, p7.rawCapture.signature); console.log('publicKey.verify() result:', verified); } catch (e) { console.log('publicKey.verify() error:', e.message); } } } } catch (error) { console.error('Error:', error.message); console.error(error.stack); }