#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()
.