在 Node-RED 中解码 AES-CTR 消息
Decoding AES-CTR messages in Node-RED
我在 Node-RED 中解密 AES-CTR 负载时遇到问题。
例如,我在这里对“消息”进行编码 -> https://cryptii.com/pipes/aes-encryption - 然后在 Node-RED 中解密该结果。
Crytii Site Results:
Input: 4d657373616765
Algorithm: AES-128
Mode: CTR
Key: 000102030405060708090a0b0c0d0e0f
IV: 101112131415161718191a1b1c1d1e1f
Output: 4a9b9c0780b266
在 Node-RED 中解密来自 Cryptii (4a9b9c0780b266) 的输出有效载荷时,我在调试窗口中收到一个“”返回值。
var cryptojs = context.global.cryptojs;
var key = '000102030405060708090a0b0c0d0e0f';
var iv = '101112131415161718191a1b1c1d1e1f';
var data = msg.payload;
var message = cryptojs.AES.decrypt(
data,
key, {
mode: cryptojs.mode.CTR,
iv: iv }
);
msg.payload = message.toString();
return msg;
这是使用的库:https://www.npmjs.com/package/crypto-js 并且需要对 Node-RED 的 settings.js 进行更改。
我对主题的理解有限,如有任何指导,我们将不胜感激。 TIA
密钥、IV 和密文是十六进制编码的,因此必须使用十六进制编码器进行解析并转换为 WordArray
s(如果密钥作为字符串传递,CryptoJS 也会应用密钥派生函数)。
密文必须作为 CipherParams
对象传递。
CTR是流密码模式,不使用填充。在 CryptoJS 中,必须明确禁用填充,否则将应用默认填充 (PKCS7)。
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); // hex decode
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // hex decode
var data = CryptoJS.enc.Hex.parse('4a9b9c0780b266'); // hex decode
var message = CryptoJS.AES.decrypt(
{ciphertext: data}, // pass ciphertext as CipherParams object
key, {
mode: CryptoJS.mode.CTR,
iv: iv,
padding: CryptoJS.pad.NoPadding // disable padding
}
);
console.log(message.toString()); // hex encode
console.log(message.toString(CryptoJS.enc.Utf8)); // UTF-8 decode
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
我在 Node-RED 中解密 AES-CTR 负载时遇到问题。
例如,我在这里对“消息”进行编码 -> https://cryptii.com/pipes/aes-encryption - 然后在 Node-RED 中解密该结果。
Crytii Site Results:
Input: 4d657373616765
Algorithm: AES-128
Mode: CTR
Key: 000102030405060708090a0b0c0d0e0f
IV: 101112131415161718191a1b1c1d1e1f
Output: 4a9b9c0780b266
在 Node-RED 中解密来自 Cryptii (4a9b9c0780b266) 的输出有效载荷时,我在调试窗口中收到一个“”返回值。
var cryptojs = context.global.cryptojs;
var key = '000102030405060708090a0b0c0d0e0f';
var iv = '101112131415161718191a1b1c1d1e1f';
var data = msg.payload;
var message = cryptojs.AES.decrypt(
data,
key, {
mode: cryptojs.mode.CTR,
iv: iv }
);
msg.payload = message.toString();
return msg;
这是使用的库:https://www.npmjs.com/package/crypto-js 并且需要对 Node-RED 的 settings.js 进行更改。
我对主题的理解有限,如有任何指导,我们将不胜感激。 TIA
密钥、IV 和密文是十六进制编码的,因此必须使用十六进制编码器进行解析并转换为 WordArray
s(如果密钥作为字符串传递,CryptoJS 也会应用密钥派生函数)。
密文必须作为 CipherParams
对象传递。
CTR是流密码模式,不使用填充。在 CryptoJS 中,必须明确禁用填充,否则将应用默认填充 (PKCS7)。
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); // hex decode
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // hex decode
var data = CryptoJS.enc.Hex.parse('4a9b9c0780b266'); // hex decode
var message = CryptoJS.AES.decrypt(
{ciphertext: data}, // pass ciphertext as CipherParams object
key, {
mode: CryptoJS.mode.CTR,
iv: iv,
padding: CryptoJS.pad.NoPadding // disable padding
}
);
console.log(message.toString()); // hex encode
console.log(message.toString(CryptoJS.enc.Utf8)); // UTF-8 decode
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>