Шифрование CryptoJS DES (ECB) - закодировано в Base64 - не дает правильного результата - PullRequest
0 голосов
/ 03 июня 2019

У нас есть сторонний поставщик, который указал нам https://www.tools4noobs.com/online_tools/encrypt/ для создания токенов аутентификации для их API.

Это прекрасно работает, но мы сейчас находимся на этапе, когда нам нужно генерировать эти токены программно. Это должен быть формат DES, режим ECB, закодированный в Base64.

Мы пробовали библиотеку JavaScript CryptoJS, но результаты не соответствуют выводу https://www.tools4noobs.com/online_tools/encrypt/

var encrypted = CryptoJS.DES.encrypt(text, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7

        });

        var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
        console.log(finalEncrypted); 

Куда я иду не так?

1 Ответ

1 голос
/ 04 июня 2019

Tools4noobs использует PHP-метод mcyrpt_encrypt, который работает с Zero-Byte-Padding.Размещенный код использует PKCS7-Padding.Чтобы использовать Zero-Byte-Padding, заполнение в коде должно быть изменено на CryptoJS.pad.ZeroPadding.

Но если следует использовать Pkcs7-Padding, то Tools4noobs не является хорошим выбором, поскольку заполнение не может быть установлено.В этом случае другой параметр - TxtWizard .

Другим источником ошибки является формат ключа.Однако нельзя сказать, является ли это проблемой здесь, поскольку генерация ключа не показана в размещенном коде.Важно, чтобы ключ передавался как WordArray, а не как строка.Если он передается в виде строки, то он интерпретируется как фраза-пароль, из которой генерируется фактический ключ, см. Ввод шифра .

Следующий код

var key = CryptoJS.enc.Latin1.parse("12345678"); // key as WordArray
var text = "The quick brown fox jumps over the lazy dog";

var encrypted = CryptoJS.DES.encrypt(text, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.ZeroPadding // Zero-Byte-Padding
});

var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log(finalEncrypted); 

имеет вывод

XokzhoQlYFGG7ZfTNqdvr0QGMsFF24oSZ5v+vsPDNlPA+GbJ2peAY/7pNhpOerOV 

в соответствии с выводом Tools4noobs .

...