Вот моя информация:
Желаемый результат:
----------------------------------------------------------------------------
Я использую эту библиотеку: https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/tripledes.js
Моя функция для шифрования:
function encryptByDES(message, key){
var iv = CryptoJS.lib.WordArray.create(8);
var encrypted = CryptoJS.TripleDES.encrypt(message, key, {
iv: key,
mode: CryptoJS.mode.CBC
});
return encrypted.toString();
}
Фактический результат:
----------------------------------------------------------------------------
Вопрос: Как мне достичь желаемого результата?
Есть ряд странностей и проблем с вашими входами/выходами и кодом:
У вас есть базовый текст Base64, который вы передаете как обычный UTF8 (???), кодированный UTF8 ключ и кодированный с шестнадцатеричным кодированием IV. В идеале вы должны работать под одной кодировкой для всех трех значений. Я рекомендую base64, если вы не можете работать с использованием простого двоичного файла.
Вы используете фиксированный IV, который вводит ряд уязвимостей, которые могут привести к восстановлению обычного текста. Всегда произвольно генерируйте IV для каждой операции шифрования.
Вы передаете ключ как IV во время шифрования, поэтому IV, который вы создаете, не используется в любом случае. Никогда не используйте ключ как IV.
Я решил вашу проблему и дал желаемый результат, но я не буду публиковать код, так как вы ничего не узнаете. Вместо этого я расскажу вам, что вам нужно сделать, чтобы исправить то, что у вас есть:
CryptoJS.enc.Utf8.parse
чтобы получить каждый как двоичные слова. EDIT: код, используемый для получения желаемого результата. Обратите внимание на преобразование из base64 в hex для output
переменной:
let iv = CryptoJS.enc.Hex.parse("0000000000000000");
let pt = CryptoJS.enc.Utf8.parse("MjAxODAxMDQwOTM5MzgxMjM0NTY3ODkwMTIzNA==");
let key = CryptoJS.enc.Utf8.parse("20180104093938xSpUoDU3Z0");
let result = CryptoJS.TripleDES.encrypt(pt, key, {
iv: iv,
mode: CryptoJS.mode.CBC
});
let output = CryptoJS.enc.Hex.stringify(CryptoJS.enc.Base64.parse(result.toString()));
console.log(output);
iv: key
.