Điểm:0

Chuẩn bị mô-đun ký/xác minh từ nút js crypto

lá cờ cn

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?

DannyNiu avatar
lá cờ vu
Vì *vai trò* của khóa công khai và khóa riêng RSA đối xứng về mặt toán học nên nhiều người nhầm lẫn việc ký RSA là "mã hóa bằng khóa riêng". Việc ký RSA yêu cầu khóa riêng, nhưng có vẻ như bạn đang sử dụng khóa chung để đăng nhập mã của mình. Cân nhắc kiểm tra lại cặp khóa và mức sử dụng API của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.