ฉันกำลังทำงานกับโมดูล crypt ของโหนดที่จะเซ็นชื่อ/ตรวจสอบ ฉันได้จัดการโมดูลการตรวจสอบแล้ว:
'ใช้อย่างเข้มงวด';
const crypto = ต้องการ ('crypto');
const fs = ต้องการ ('fs');
เส้นทาง const = ต้องการ ('เส้นทาง');
const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
const encryptDataPath = path.join(__dirname, 'encryptData.txt');
ให้ encryptData = fs.readFileSync(encryptDataPath).toString();
//console.log(เข้ารหัสข้อมูล);
// เริ่มถอดรหัส
const plainEncryptData = Buffer.from(encryptData, 'base64').toString();
const [ลายเซ็นb64, contentb64] = plainEncryptData.split('\n');
ลายเซ็น const = Buffer.from (ลายเซ็นb64, 'base64');
เนื้อหา const = Buffer.from(contentb64, 'base64').toString();
ตัวตรวจสอบ const = crypto.createVerify ('RSA-SHA256');
verifier.update (เนื้อหา);
verifier.end();
const isValid = verifier.verify (publicKey, ลายเซ็น);
ถ้า (!isValid) {
console.log('ไม่ถูกต้อง');
} อื่น {
console.log (เนื้อหา);
}
นี่คือรหัสสาธารณะ (pub.key):
----- เริ่มคีย์สาธารณะ -----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuI1XlPkYos3WsSeVPtS
l1Q2k8GnLEO5vFZ4EuSghMbqI+yE0tWVEaiptdV3KgERaALRXmH+IFrHqvSRjKQC
1ORUarBU5ntWbNEr713R3K0BPOzz9OOoWHdk+Wmr4ViOTk0iD1u4bw/97RpyMoBm
+pXeBLHbEESK2kelk+LEmKUoY5nXp6KzZV5wxgD5QweZheU7mjXL5WMpIBJva8kp
RZMYXEF+uSZIep0q5FHEo2AazGUMAU3GjY/dpXisLmtleOa1xlKZmkvaXl/D2Mhb
BBqPbDMa72ToZg2J8K5UP9zXUP41FHr7o9rwSJ2uOkuZPg5nhDXeoVbrJwxP/U1M
nQIDAQAB
----- สิ้นสุดรหัสสาธารณะ -----
นี่คือ encryptData.txt (เข้ารหัสข้อมูล)
ZmZzeUNhcmU2Q1pTRHo2M0VrT0tGeGJUWitDMGJydnF0dzRWZDc5STJIUTJuWndPZzVoaE8rbU5keEhIMHBEak0xVUxHRGNYQ0w1Wk5maVN4M096dDJXZEowSmk4R1pGZTZOc0s1dm05SDJHd1hUR3Q0VHl1ejFkbGlqbjRwcTBSM0xLSDl6SThWT1RLNTdySWlGeVZQa0pxQzJJMkowaW1LYTZxbWpGU0hsVTVQU3BrVk9YYUxGMVJNQjBsWm5ncDcwMEJXT1k4V3FlSHlvS0pKY0NXTkpJRGRDWEw1ZWpuTXFpY0VUTzZWV25BMThkVitRQUZRS2k5SG5SR1VuVGhlYUI2QU9jcWRzMGZzWVlvM0xZZlQwbDZELzJHd0dJZXZ3LzlxMmoxVmJKcFNBUTBldTJYUlJ4Z2VFZmFlQys0MUZIZ0haNHc4UXBmb09leW1WSkN3PT0KZXlKMGVYQmxJam9pWW5KdmJucGxJaXdpWTNWemRHOXRaWEpKWkNJNklqRTJRMDlXVWxOak9YZ3lNV1pEU0c1Rklpd2laWGh3YVhKbFFYUWlPakUyTWpZMU56WXpOakl3TURBc0ltbHpWSEpwWVd3aU9uUnlkV1VzSW14cFkyVnVjMlZMWlhraU9pSmpPVEk1TldJMk9TMWlaV1UyTFRRek1XRXRPR1EzWkMwd1lqYzBNR1l3TVdOaE1tUWlMQ0pqY21WaGRHVmtRWFFpT2pFMk1qVXpOalkzTmprMU16Rjk=
ตอนนี้ฉันกำลังพยายามสร้างโมดูลการลงนามซึ่งจะสร้างข้อมูลที่เข้ารหัสเหมือนกับ encryptData.txt:
'ใช้อย่างเข้มงวด';
const crypto = ต้องการ ('crypto');
const fs = ต้องการ ('fs');
เส้นทาง const = ต้องการ ('เส้นทาง');
const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
ให้เนื้อหา = {}
content.type = "บรอนซ์";
content.customerId = "16COVRSc9x21fCHnE";
content.expireAt = 1626576362000;
content.isTrial = จริง;
content.licenseKey = "c9295b69-bee6-431a-8d7d-0b740f01ca2d";
content.createdAt = 1625366769531;
const encryptDataPath = path.join(__dirname, 'encryptData.txt');
ให้ a = fs.readFileSync(encryptDataPath).toString();
//เซ็น
ผู้ลงนาม const = crypto.createSign ('RSA-SHA256');
signer.update (เนื้อหา);
signer.end();
ลายเซ็น const = signer.sign (publicKey, 'base64');
console.log('เครื่องหมาย:', ลายเซ็น);
แต่เมื่อฉันรันโมดูลเข้ารหัสนี้ มันแสดงข้อผิดพลาดนี้:
ภายใน/crypto/util.js:97
โยน ERR_INVALID_ARG_TYPE ใหม่ (
^
TypeError [ERR_INVALID_ARG_TYPE]: อาร์กิวเมนต์ "data" ต้องเป็นหนึ่งในประเภท string, Buffer, TypedArray หรือ DataView วัตถุประเภทที่ได้รับ
ที่ Sign.update (ภายใน/crypto/sig.js:49:10)
ที่ Object.<anonymous> (/home/ubuntu/www/node-encrpt/encode.js:23:8)
ที่ Module._compile (ภายใน/โมดูล/cjs/loader.js:959:30)
ที่ Object.Module._extensions..js (ภายใน/โมดูล/cjs/loader.js:995:10)
ที่ Module.load (ภายใน/โมดูล/cjs/loader.js:815:32)
ที่ Function.Module._load (ภายใน/โมดูล/cjs/loader.js:727:14)
ที่ Function.Module.runMain (ภายใน/โมดูล/cjs/loader.js:1047:10)
ที่ internal/main/run_main_module.js:17:11 {
รหัส: 'ERR_INVALID_ARG_TYPE'
}
ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงเกิดขึ้น
ฉันจะทำโมดูลเข้ารหัสให้เสร็จสมบูรณ์ได้อย่างไร