rsa p7 验签通过
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user