NodeJS 合并来自CryptoJS的两个结果

bn31dyow  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(103)

我在Nodejs上使用AES加密和CryptoJS库,一切正常,但最后我想将IV放入前16个字节,然后将加密数据放入数组字节,然后将其放入base64,但我不知道如何在nodejs中执行此操作

let secret = 'Hello';
var key = CryptoJS.enc.Base64.parse('QVNES0FVemFzZHVoMjM0MzIyNjlCNTIyRTcwNUQ0RjI='); 
let ivByte= crypto.randomBytes(16);
let newIV= this.toCryptoJSWordArray(ivByte);

我将像这样加密:

CryptoJS.AES.encrypt(secret, key, {iv: newIV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});

这一切都很好,结果是:

console.log({
            text:'Hello',
            iv:CryptoJS.enc.Base64.stringify(newIV), 
            enc:CryptoJS.enc.Base64.stringify(e1.ciphertext), 
        })

都输出IV和加密文本base64正确,正如我所期望的
现在我想把这两个字节组合成一个数组(比如前16个字节是IV +加密数据(没有一个是base64),然后把它们转换成base64格式,意思是在base64之前的u IV和加密文本把它们组合成一个数组,然后把它们组合成base64,但我不知道怎么做。预期输出是:数量

guicsvcw

guicsvcw1#

CryptoJS为WordArrays的连接提供了concat()wa1.concat(wa2)。这会将wa2附加到wa1
如果不更改wa1,则将其与clone()复制:wa1.clone().concat(wa2)

var ivWA = CryptoJS.enc.Base64.parse('J78xP3jq+dhgwTJrXiQW9A==');
var ciphertextWA = CryptoJS.enc.Base64.parse('amBBgezSkW1SQamv8pnaQg==');
var ivCiphertextWA = ivWA.clone().concat(ciphertextWA);
console.log(ivWA.toString(CryptoJS.enc.Base64));           // J78xP3jq+dhgwTJrXiQW9A==
console.log(ciphertextWA.toString(CryptoJS.enc.Base64));   // amBBgezSkW1SQamv8pnaQg==
console.log(ivCiphertextWA.toString(CryptoJS.enc.Base64)); // J78xP3jq+dhgwTJrXiQW9GpgQYHs0pFtUkGpr/KZ2kI=
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

相关问题