Node.js AES расшифровка строки Base64 - PullRequest
0 голосов
/ 27 августа 2018

Я дешифрую сообщения от Firebase, которые отправляются на Firebase function.

Я довольно новичок в шифровании. Но я использую AES-256 со статическим IV (я знаю, что отсутствие случайного iv не лучшее решение).

но я получаю правильные результаты как на Android, так и на iOS, но не на node.js.

Сообщение закодировано в Base64

это мой код:

const crypto = require('crypto');
const cryptoKey = "MyEncryptionKey1MyEncryptionKey1";
const text = "Cidor8Ph7pZqPw0x2AwIKw=="

let messageToDecrypt = new Buffer(text, "utf8")
let key = new Buffer(cryptoKey, "utf8");
var decipher = crypto.createCipheriv('aes-256-cbc', key, iv);
var decoded = decipher.update(messageToDecrypt,'base64','utf-8');
decoded += decipher.final('utf-8');
text = decoded
console.log(decoded

Код компилируется и запускается, но он дает мне простой ответ, который выглядит примерно так �ŴC�p�-Q�)�1H&�8pD}5�i��ǁ�g

Есть идеи, как улучшить этот код?

1 Ответ

0 голосов
/ 27 августа 2018

Что сразу бросается мне в глаза, так это то, что вы неправильно создаете свой messageToDecrypt буфер. Вы пишете:

const text = "Cidor8Ph7pZqPw0x2AwIKw=="
let messageToDecrypt = new Buffer(text, "utf8")

Что означает, сделайте буфер, текст, который я вам даю, закодирован utf8 . Это не utf8 кодируется, это base64 кодировано.

Так что вы должны использовать:

const text = "Cidor8Ph7pZqPw0x2AwIKw=="
let messageToDecrypt = Buffer.from(text, "base64")

Рассмотрим разницу в буферах, которую создает кодировка:

> Buffer.from(text, "utf8");
<Buffer 43 69 64 6f 72 38 50 68 37 70 5a 71 50 77 30 78 32 41 77 49 4b 77 3d 3d>
> Buffer.from(text, "base64");
<Buffer 0a 27 68 af c3 e1 ee 96 6a 3f 0d 31 d8 0c 08 2b>
...