Как зашифровать с помощью AES CBC Zero Padding в Javascript и расшифровать с помощью Java - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно зашифровать в Javascript и расшифровать в Java, но когда я зашифровываю в Java, текст отличается, я использовал другой скрипт, но тот же алгоритм, AES-128 CBC Zero Padding.

Это для Javascript и Java 7 в Intellij IDEA

Javascript:

   var message = "3258";
   var key = "CLAVE00000000000";
   var iv  = "VECTOR0000000000";

   var ciphertext = CryptoJS.AES.encrypt(message, key,  {iv: iv, padding: CryptoJS.pad.ZeroPadding, mode: CryptoJS.mode.CBC});
   alert(ciphertext.toString());

   var decrypt = CryptoJS.AES.decrypt(ciphertext, key, {iv: iv, padding: CryptoJS.pad.ZeroPadding, mode: CryptoJS.mode.CBC});
   alert(CryptoJS.enc.Utf8.stringify(decrypt).toString());

Java:

KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
keyGenerator.init(AES_128);

String key = "CLAVE00000000000";
String IV = "VECTOR0000000000";
System.out.println("1. Message to Encrypt: " + new String(message, StandardCharsets.UTF_8));

byte[] cipherText = encrypt(key, IV, message);
System.out.println("2. Encrypted Text: " + Base64.getEncoder().encodeToString(cipherText));

byte[] decryptedString = decrypt(key, IV, cipherText);
System.out.println("3. Decrypted Message : " + new String(decryptedString));

Я ожидаю, что зашифрованный текст идентичен в Javascript или в Java, но значения отличаются

1 Ответ

0 голосов
/ 22 апреля 2019

В коде JavaScript ключ и iv должны быть переданы как WordArrays.Для этой цели CryptoJS предоставляет функции преобразования:

var key = CryptoJS.enc.Latin1.parse("CLAVE00000000000");
var iv = CryptoJS.enc.Latin1.parse("VECTOR0000000000");

Если ключ передается в виде строки (как это имеет место в размещенном коде), он обрабатывается как фраза-пароль и используется для полученияключ и IV (см. здесь , раздел Ввод шифра ).

Кроме того, в JavaScript-коде Zero-Byte-Padding должен быть заменен на Pkcs7-Padding(padding: CryptoJS.pad.Pkcs7 вместо padding: CryptoJS.pad.ZeroPadding) в вызовах encrypt - и decrypt.

Тогда шифрование JavaScript-кода соответствует шифрованию Java-кода (sEAtASy0J3+Ya3g+Afcj3Q== дляиспользуемое сообщение, ключ и IV).

Замена отступа является предположением, поскольку encrypt - и decrypt -методы Java-кода не были опубликованы, так что прямая проверкаэто невозможно.Однако в отношении того же шифрования при переключении на Pkcs7 это должно быть правдой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...