Puncte:0

Pregătiți modulul de semnare/verificare din node js crypto

drapel cn

Lucrez la un modul de criptare nod care va semna/verifica. Am gestionat modulul de verificare:

„utilizați strict”;

const crypto = require('cripto');
const fs = require('fs');
const cale = require('cale');

const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
const encryptDataPath = path.join(__dirname, 'encryptData.txt');
let encryptData = fs.readFileSync(encryptDataPath).toString();

//console.log(encryptData);


// începe decodarea
const plainEncryptData = Buffer.from(encryptData, 'base64').toString();


const [signatureb64, contentb64] = plainEncryptData.split('\n');


const semnătură = Buffer.from(signatureb64, 'base64');
const content = Buffer.from(contentb64, 'base64').toString();

const verifier = crypto.createVerify('RSA-SHA256');
verificator.actualizare(conținut);
verificator.end();

const isValid = verifier.verify(publicKey, semnătură);

dacă (! este Valid) {
    console.log('nu este valid');
} altfel {    
    console.log(conținut);
}

Iată cheia publică (pub.key):

-----ÎNCEPE CHEIA PUBLICĂ-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuI1XlPkYos3WsSeVPtS
l1Q2k8GnLEO5vFZ4EuSghMbqI+yE0tWVEaiptdV3KgERaALRXmH+IFrHqvSRjKQC
1ORUarBU5ntWbNEr713R3K0BPOzz9OOoWHdk+Wmr4ViOTk0iD1u4bw/97RpyMoBm
+pXeBLHbEESK2kelk+LEmKUoY5nXp6KzZV5wxgD5QweZheU7mjXL5WMpIBJva8kp
RZMYXEF+uSZIep0q5FHEo2AazGUMAU3GjY/dpXisLmtleOa1xlKZmkvaXl/D2Mhb
BBqPbDMa72ToZg2J8K5UP9zXUP41FHr7o9rwSJ2uOkuZPg5nhDXeoVbrJwxP/U1M
nQIDAQAB
-----SCHEARE CHEIE PUBLICA-----

Aici este encryptData.txt (criptează datele)

ZmZzeUNhcmU2Q1pTRHo2M0VrT0tGeGJUWitDMGJydnF0dzRWZDc5STJIUTJuWndPZzVoaE8rbU5keEhIMHBEak0xVUxHRGNYQ0w1Wk5maVN4M096dDJXZEowSmk4R1pGZTZOc0s1dm05SDJHd1hUR3Q0VHl1ejFkbGlqbjRwcTBSM0xLSDl6SThWT1RLNTdySWlGeVZQa0pxQzJJMkowaW1LYTZxbWpGU0hsVTVQU3BrVk9YYUxGMVJNQjBsWm5ncDcwMEJXT1k4V3FlSHlvS0pKY0NXTkpJRGRDWEw1ZWpuTXFpY0VUTzZWV25BMThkVitRQUZRS2k5SG5SR1VuVGhlYUI2QU9jcWRzMGZzWVlvM0xZZlQwbDZELzJHd0dJZXZ3LzlxMmoxVmJKcFNBUTBldTJYUlJ4Z2VFZmFlQys0MUZIZ0haNHc4UXBmb09leW1WSkN3PT0KZXlKMGVYQmxJam9pWW5KdmJucGxJaXdpWTNWemRHOXRaWEpKWkNJNklqRTJRMDlXVWxOak9YZ3lNV1pEU0c1Rklpd2laWGh3YVhKbFFYUWlPakUyTWpZMU56WXpOakl3TURBc0ltbHpWSEpwWVd3aU9uUnlkV1VzSW14cFkyVnVjMlZMWlhraU9pSmpPVEk1TldJMk9TMWlaV1UyTFRRek1XRXRPR1EzWkMwd1lqYzBNR1l3TVdOaE1tUWlMQ0pqY21WaGRHVmtRWFFpT2pFMk1qVXpOalkzTmprMU16Rjk=

Acum, încerc să-i creez modulul de semnare care va crea datele de criptare la fel ca encryptData.txt:

„utilizați strict”;

const crypto = require('cripto');
const fs = require('fs');
const cale = require('cale');

const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));

lasă conținut = {}
content.type = „bronz”;
content.customerId = "16COVRSc9x21fCHnE";
content.expireAt = 1626576362000;
content.isTrial = adevărat;
content.licenseKey = "c9295b69-bee6-431a-8d7d-0b740f01ca2d";
content.createdAt = 1625366769531;


const encryptDataPath = path.join(__dirname, 'encryptData.txt');
lasă a = fs.readFileSync(encryptDataPath).toString();

// semnarea
const signer = crypto.createSign('RSA-SHA256');
signer.update(conținut);
semnatar.end();

const semnătură = signer.sign(publicKey, 'base64');

console.log('semn: ', semnătură);
 

Dar când rulez acest modul de criptare, aruncă această eroare:

intern/crypto/util.js:97
    aruncați un nou ERR_INVALID_ARG_TYPE(
    ^

TypeError [ERR_INVALID_ARG_TYPE]: argumentul „date” trebuie să fie unul de tip șir, Buffer, TypedArray sau DataView. Obiect de tip primit
    la Sign.update (intern/crypto/sig.js:49:10)
    la Object.<anonymous> (/home/ubuntu/www/node-encrpt/encode.js:23:8)
    la Module._compile (internal/modules/cjs/loader.js:959:30)
    la Object.Module._extensions..js (intern/modules/cjs/loader.js:995:10)
    la Module.load (intern/modules/cjs/loader.js:815:32)
    la Function.Module._load (internal/modules/cjs/loader.js:727:14)
    la Function.Module.runMain (intern/modules/cjs/loader.js:1047:10)
    la internal/main/run_main_module.js:17:11 {
  cod: „ERR_INVALID_ARG_TYPE”
}

Nu pot să-mi dau seama de ce se întâmplă asta.

Cum pot completa modulul de criptare?

DannyNiu avatar
drapel vu
Deoarece *rolurile* cheii publice și private RSA sunt simetrice din punct de vedere matematic, mulți confundă semnarea RSA cu „criptare cu cheie privată”. Semnarea RSA necesită cheie privată, dar se pare că utilizați cheia publică pentru a vă conecta codul. Vă recomandăm să verificați din nou perechea de chei și utilizarea API-ului.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.