Шифрование / дешифрование AES дает другой результат для одного и того же ввода и одного и того же iv, pad

#javascript #aes #cryptojs

#javascript #aes #cryptojs

Вопрос:

Я пытаюсь создать 2 приложения, первое зашифровать данные и сохранить их в файл, затем второе попытается прочитать этот файл и расшифровать его содержимое

Я работаю с crypto-js библиотекой с ionic/angular

в первой программе (шифровальщик) Я написал:

 encryptTest(input: string) {
    let key = "secret";
    return crypto.AES.encrypt(input, key, {
      iv: 'aTestIvValueKey',
      mode: crypto.mode.CBC,
      padding: crypto.pad.Pkcs7
    }).toString();
  }
  

затем я вызываю это с:

 this.encryptTest('hello world !')
  

это дает мне на выходе:

U2FsdGVkX186H1iRZM4Il 10/TS6gM7DoUaghwAZX3A=

когда я пытаюсь расшифровать этот вывод во второй программе, он не выдает мне предыдущий ввод: hello world ! но неверный тест, который:

68656c6c6f20776f726c642021

вторая программа (дешифровщик): имеет:

 decryptTest(input: string) {
    let key = "secret";
    return crypto.AES.decrypt(input, key, {
      iv: 'aTestIvValueKey',
      mode: crypto.mode.CBC,
      padding: crypto.pad.Pkcs7
    }).toString();
  }
  

PS: я использую тот же iv, pad amp; mode

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

1. Это дает вам шестнадцатеричные значения в кодировке ASCII hello world ! . h = 68, e = 65.

2. 68656c6c6f20776f726c642021 на самом деле читает hello world! это просто шестнадцатеричное представление ascii.

3. есть ли причина не использовать встроенную криптографию вместо библиотеки?

4. Странно, однако, я попросил его преобразовать toString(), большое спасибо, вы спасли мой день

Ответ №1:

Когда вы расшифровываете, вы получаете байты, вам нужно передать эти байты в правильной кодировке, чтобы получить слова в символах.

Ответ №2:

Итак, что я сделал, чтобы решить:

 return crypto.AES.decrypt(input, key, {
      iv: 'aTestIvValueKey',
      mode: crypto.mode.CBC,
      padding: crypto.pad.Pkcs7
    }).toString(crypto.enc.Utf8);
  

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

1. Для меня это все тот же результат, с которым вы столкнулись, я добавил utf8