Криптографическая расшифровка AES не работает в API JS узла

#javascript #node.js #reactjs #encryption #cryptojs

Вопрос:

На моем веб-сайте я зашифровал объект с помощью шифрования crypto AES в интерфейсе react. Теперь я должен расшифровать его на бэкэнде node JS.

Я использую один и тот же ключ, одну и ту же версию пакета crypto JS, одну и ту же версию узла с обеих сторон. Но зашифрованная строка на стороне интерфейса react не расшифровывается на серверной части узла JS.

Я использовал приведенный ниже код для шифрования и дешифрования.

Шифрование на интерфейсной стороне React

 const pinObj = {
    pin: this.state.pin_number,
};
let ciphertext = crypto.AES.encrypt(JSON.stringify(pinObj), config.aesSecretkey);
const encryptedText = ciphertext.toString();
 

Расшифровка на внутренней стороне узла JS

 const encryptedText = data['encrypted_pin_number'];
const bytes = crypto.AES.decrypt(encryptedText, config.aesSecretkey);
const decryptedData = bytes.toString(crypto.enc.Utf8);
const pinObj = JSON.parse(decryptedData);
 

У меня есть пустая строка в decryptedData переменной.

Не могли бы вы, пожалуйста, подсказать, в чем проблема и каково ее решение?

Комментарии:

1. Код довольно прост и, похоже, не содержит ошибок. Если оба кода выполняются в одной и той же среде, расшифровка работает. Вы должны проверить, идентичны ли encryptedText на стороне дешифрования и шифрования. Возможно, проблема в передаче данных. Также следует проверить равенство ключей. Было бы лучше разместить образцы данных (открытый текст, пароль и зашифрованный текст).

2. Похоже, вы пытаетесь зашифровать транспортный канал между клиентом и сервером. Но https делает это за вас автоматически. Были времена, когда кто-то пытался изобрести такое шифрование до появления «Позволяет шифровать», но теперь вы можете бесплатно защищать связь между вашим сервером и клиентами. Вам действительно нужно зашифровать что-то внутри уже зашифрованного канала связи?

3. @Topaco да, я проверил, encryptedText идентичен с обеих сторон, и с обеих сторон используется один и тот же ключ.

4. @MaximSagaydachny Да, я передаю PIN-код Пользователя для доступа к веб-порталу. Поэтому мой клиент не хочет передавать его в простой форме.

5. Как я уже сказал, в одной и той же среде работают оба кода. Вы должны опубликовать пример кода на стороне интерфейса React, т. е. значения JSON.stringify(pinObj) , config.aesSecretKey и ciphertext.toString() .