Различные выходы для шифрования AES с использованием CryptoJS и шифрования AES в JavaScript

Вот мое решение для PHP, Ruby & Swift.

Я столкнулся с проблемами при использовании CryptoJS в моем тесте.

мой код такой

var data = "Hello World";
var key = "57119C07F45756AF6E81E662BE2CCE62";
var iv = "GsCJsm/uyxG7rBTgBMrSiA==";

var encryptedData = CryptoJS.AES.encrypt(data,
CryptoJS.enc.Hex.parse(key), {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv: CryptoJS.enc.Base64.parse(iv)
}
);

console.log("encryptedData: " + encryptedData);

// var crypttext = encryptedData.toString();
var crypttext = "k4wX2Q9GHU4eU8Tf9pDu+w==";

var decryptedData = CryptoJS.AES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(crypttext)
}, CryptoJS.enc.Hex.parse(key), {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv: CryptoJS.enc.Base64.parse(iv)
});

console.log("decryptedData: " + decryptedData);

результат console.log

encryptedData: 97SwKfGtNARERiSYyZxdAQ==

decryptedData:

0

Решение

Я посмотрел на ваш код PHP. Вы используете 32-символьный ключ, который явно закодирован в шестнадцатеричном формате, но вместо того, чтобы декодировать его в байты, вы используете символы непосредственно. Следовательно aes-256-cbc шифр тоже не так.

Если вы не хотите изменять вводящий в заблуждение код PHP, вы можете просто сделать ту же ошибку в CryptoJS: CryptoJS.enc.Utf8.parse(key) вместо CryptoJS.enc.Hex.parse(key),


Соображения безопасности:

IV должен быть непредсказуемым (читай: случайно). Не используйте статический IV, потому что это делает шифр детерминированным и, следовательно, не является семантически безопасным. Злоумышленник, наблюдающий шифротексты, может определить, когда тот же префикс сообщения был отправлен ранее. IV не секрет, поэтому вы можете отправить его вместе с зашифрованным текстом. Обычно он просто добавляется к зашифрованному тексту и отсекается перед расшифровкой.

Лучше аутентифицировать ваши шифротексты так, чтобы атаки набивка оракула не возможно. Это можно сделать с помощью аутентифицированных режимов, таких как GCM или EAX, или с шифровать-то-MAC схема.

1

Другие решения

Других решений пока нет …