Skip to content

Commit 51bfd5b

Browse files
save file
1 parent 8c42bbb commit 51bfd5b

1 file changed

Lines changed: 68 additions & 19 deletions

File tree

blog/26-04-26/x509-certificates-in-js---encrypt-decrypt-data/ex/aes-encrypt-decrypt-nodejs.js

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,52 @@ aes-encrypt-decrypt-nodejs.js
1717

1818

1919

20-
function importAesKey(base64){
20+
//:
21+
22+
23+
function generateAesKey(length=256){
24+
25+
var bytes = length/8;
26+
var key = crypto.randomBytes(32);
27+
// console.log("Hex Key:", key.toString('hex'));
28+
// console.log("Base64 Key:", key.toString('base64'));
29+
return key;
30+
31+
}//generateAesKey
32+
2133

22-
return Buffer.from(base64,'base64'); // raw 32‑byte key
34+
function importAesKey(blob){
35+
36+
var key = await blob_buffer(blob);
37+
return key;
2338

2439
}//importAesKey
2540

2641

27-
function aesEncryptNode(keyBuf,plaintext,iv_bits=96){
42+
function exportAesKey(key){
43+
44+
var key2 = buffer_blob(key);
45+
return key2;
46+
47+
}//exportAesKey
48+
49+
50+
async function aesEncryptNode(key,blob,iv_bits=96){
2851

2952
var bytes = iv_bits/8;
3053
var iv = crypto.randomBytes(bytes);
54+
key = await blob_buffer(key);
55+
var buf = await blob_buffer(blob);
3156

32-
var cipher = crypto.createCipheriv('aes-256-gcm',keyBuf,iv);
57+
var cipher = crypto.createCipheriv('aes-256-gcm',key,iv);
3358

34-
var buf1 = cipher.update(plaintext,'utf8');
59+
var buf1 = cipher.update(buf);
3560
var buf2 = cipher.final();
3661

3762
var encrypted = Buffer.concat([buf1,buf2]);
38-
3963
var tag = cipher.getAuthTag();
4064

41-
var buf = Buffer.concat([ciphertext,authTag]);
65+
var buf = Buffer.concat([encrypted,authTag]);
4266

4367
var blob = iv_buf_blob(iv,buf);
4468
return blob;
@@ -47,21 +71,29 @@ aes-encrypt-decrypt-nodejs.js
4771

4872

4973

50-
function aesDecryptNode(keyBuf,encrypted){
74+
async function aesDecryptNode(key,blob,iv_bits=96){
5175

52-
var iv = Buffer.from(encrypted.iv, 'base64');
53-
var data = Buffer.from(encrypted.data, 'base64');
54-
var tag = Buffer.from(encrypted.tag, 'base64');
76+
var bytes = iv_bits/8;
77+
var taglength = 16;
5578

56-
var decipher = crypto.createDecipheriv('aes-256-gcm', keyBuf, iv);
57-
decipher.setAuthTag(tag);
79+
var buf = await blob_buffer(blob);
80+
var iv = buf.subarray(0,bytes);
81+
buf = buf.subarray(bytes);
82+
var n = buf.length-taglength;
83+
var authTag = buf.subarray(n);
84+
buf = buf.subarray(0,n);
5885

59-
var decrypted = Buffer.concat([
60-
decipher.update(data),
61-
decipher.final()
62-
]);
6386

64-
return decrypted.toString('utf8');
87+
var decipher = crypto.createDecipheriv('aes-256-gcm',key,iv);
88+
decipher.setAuthTag(authTag);
89+
90+
var buf1 = decipher.update(buf);
91+
var buf2 = decipher.final();
92+
93+
var decrypted = Buffer.concat([buf1,buf2]);
94+
var blob = new Blob([decrypted]);
95+
96+
return blob;
6597

6698
}//aesDecryptNode
6799

@@ -83,11 +115,28 @@ aes-encrypt-decrypt-nodejs.js
83115

84116

85117

118+
function buffer_blob(buf){
119+
120+
var blob = new Blob([buf]);
121+
return blob;
122+
123+
}//buffer_blob
124+
86125

87126
async function blob_buffer(){
88127

89128
var buf = await blob.arrayBuffer();
90129
var buffer = Buffer.from(buf);
91130
return buffer;
92131

93-
}//blob_buffer
132+
}//blob_buffer
133+
134+
135+
136+
137+
138+
139+
140+
141+
142+

0 commit comments

Comments
 (0)