#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