Tôi đang làm việc trên mô-đun mã hóa nút sẽ ký/xác minh. Tôi đã quản lý mô-đun xác minh:
'Sử dụng nghiêm ngặt';
const tiền điện tử = yêu cầu ('tiền điện tử');
const fs = yêu cầu('fs');
const đường dẫn = yêu cầu ('đường dẫn');
const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
const cryptoDataPath = path.join(__dirname, 'encryptData.txt');
hãy để mã hóaData = fs.readFileSync(encryptDataPath).toString();
//console.log(encryptData);
// bắt đầu giải mã
const plainEncryptData = Buffer.from(encryptData, 'base64').toString();
const [signatureb64, contentb64] = plainEncryptData.split('\n');
const signature = Buffer.from(signatureb64, 'base64');
const content = Buffer.from(contentb64, 'base64').toString();
const verifier = crypto.createVerify('RSA-SHA256');
verifier.update(nội dung);
verifier.end();
const isValid = verifier.verify(publicKey, signature);
nếu (!isValid) {
console.log('không hợp lệ');
} khác {
console.log(nội dung);
}
Đây là khóa công khai (pub.key):
----- BẮT ĐẦU KHÓA CÔNG CỘNG -----
MIIBIJANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuI1XlPkYos3WsSeVPtS
l1Q2k8GnLEO5vFZ4EuSghMbqI+yE0tWVEaiptdV3KgERAALRXmH+IFrHqvSRjKQC
1ORUarBU5ntWbNEr713R3K0BPOzz9OOoWHdk+Wmr4ViOTk0iD1u4bw/97RpyMoBm
+pXeBLHbEESK2kelk+LEmKUoY5nXp6KzZV5wxgD5QweZheU7mjXL5WmpIBJva8kp
RZMYXEF+uSZIep0q5FHEo2AazGUMAU3GjY/dpXisLmtleOa1xlKZmkvaXl/D2Mhb
BBqPbDMa72ToZg2J8K5UP9zXUP41FHr7o9rwSJ2uOkuZPg5nhDXeoVbrJwxP/U1M
nQIDAQAB
-----KẾT THÚC KHÓA CÔNG CỘNG-----
Đây làcryptData.txt (mã hóa dữ liệu)
ZmZzeUNhcmU2Q1pTRHo2M0VrT0tGeGJUWitDMGJydnF0dzRWZDc5STJIUTJuWndPZzVoaE8rbU5keEhIMHBEak0xVUxHRGNYQ0w1Wk5maVN4M096dDJXZEowSmk4R1pGZTZOc0s1dm05SDJHd1hUR3Q0VHl1ejFkbGlqbjRwcTBSM0xLSDl6SThWT1RLNTdySWlGeVZQa0pxQzJJMkowaW1LYTZxbWpGU0hsVTVQU3BrVk9YYUxGMVJNQjBsWm5ncDcwMEJXT1k4V3FlSHlvS0pKY0NXTkpJRGRDWEw1ZWpuTXFpY0VUTzZWV25BMThkVitRQUZRS2k5SG5SR1VuVGhlYUI2QU9jcWRzMGZzWVlvM0xZZlQwbDZELzJHd0dJZXZ3LzlxMmoxVmJKcFNBUTBldTJYUlJ4Z2VFZmFlQys0MUZIZ0haNHc4UXBmb09leW1WSkN3PT0KZXlKMGVYQmxJam9pWW5KdmJucGxJaXdpWTNWemRHOXRaWEpKWkNJNklqRTJRMDlXVWxOak9YZ3lNV1pEU0c1Rklpd2laWGh3YVhKbFFYUWlPakUyTWpZMU56WXpOakl3TURBc0ltbHpWSEpwWVd3aU9uUnlkV1VzSW14cFkyVnVjMlZMWlhraU9pSmpPVEk1TldJMk9TMWlaV1UyTFRRek1XRXRPR1EzWkMwd1lqYzBNR1l3TVdOaE1tUWlMQ0pqY21WaGRHVmtRWFFpT2pFMk1qVXpOalkzTmprMU16Rjk=
Bây giờ, tôi đang cố gắng tạo mô-đun ký của nó, mô-đun này sẽ tạo dữ liệu mã hóa giống nhưcryptData.txt:
'Sử dụng nghiêm ngặt';
const tiền điện tử = yêu cầu ('tiền điện tử');
const fs = yêu cầu('fs');
const đường dẫn = yêu cầu ('đường dẫn');
const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
hãy để nội dung = {}
content.type = "đồng";
content.customerId = "16COVRSc9x21fCHnE";
nội dung.expireAt = 1626576362000;
nội dung.isTrial = true;
content.licenseKey = "c9295b69-bee6-431a-8d7d-0b740f01ca2d";
nội dung.createdAt = 1625366769531;
const cryptoDataPath = path.join(__dirname, 'encryptData.txt');
để a = fs.readFileSync(encryptDataPath).toString();
// ký
const signer = crypto.createSign('RSA-SHA256');
người ký.update(nội dung);
người ký.end();
const signature = signer.sign(publicKey, 'base64');
console.log('ký: ', chữ ký);
Nhưng khi tôi chạy mô-đun mã hóa này, nó sẽ báo lỗi này:
nội bộ/crypto/util.js:97
ném ERR_INVALID_ARG_TYPE mới(
^
TypeError [ERR_INVALID_ARG_TYPE]: Đối số "dữ liệu" phải là một trong các loại chuỗi, Bộ đệm, TypedArray hoặc DataView. Đối tượng loại đã nhận
tại Sign.update (nội bộ/crypto/sig.js:49:10)
tại Object.<anonymous> (/home/ubuntu/www/node-encrpt/encode.js:23:8)
tại Module._compile (nội bộ/mô-đun/cjs/loader.js:959:30)
tại Object.Module._extensions..js (nội bộ/mô-đun/cjs/loader.js:995:10)
tại Module.load (nội bộ/mô-đun/cjs/loader.js:815:32)
tại Function.Module._load (nội bộ/mô-đun/cjs/loader.js:727:14)
tại Function.Module.runMain (nội bộ/mô-đun/cjs/loader.js:1047:10)
tại nội bộ/chính/run_main_module.js:17:11 {
mã: 'ERR_INVALID_ARG_TYPE'
}
Tôi không thể tìm ra lý do tại sao điều này xảy ra.
Làm cách nào tôi có thể hoàn thành mô-đun mã hóa?