Существует клиентский код JS, который использует библиотеку Crypto JS для кодирования данных и отправки их на сервер. Мне нужно сделать то же самое, но с использованием Java клиента.
Проблема в том, что я не знаю, какие параметры по умолчанию Crypto JS использует для шифрования.
// client code is very simple
var key = document.; // session string generated on server side
CryptoJS.AES.encrypt(text,key);
Также JS клиент отправляет значение ключа на сервер как MD5 га sh, например: CryptoJS.MD5(secret)
.
JS клиент использует Crypto JS v3.1.2
Docs заявляет, что он использует CB C и Pkcs7. Нет информации о соли, векторах и т. Д. c.
Итак, я пытаюсь написать тот же код на Java.
String sessionKey = "Wj10MQVgTAwBzsYfjAqtqDeThUyWOnOY";
byte[] sessionKeyBytes = sessionKey.getBytes();
String password = "kupacabra";
String sessionKeyMD5ShouldBe = "7369b67153ac0176e67c073aa4f56c88";
String encodedPasswordShouldBe = "U2FsdGVkX1/yBkv8RFXq5zUPgWWIcEL+i59z+IwfrYs=";
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // PKCS7 throws exception?
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKeyBytes, "AES"));
byte[] encodedPasswordBytes = cipher.doFinal(password.getBytes());
System.out.println(Arrays.toString(encodedPasswordBytes));
System.out.println(Arrays.toString(encodedPasswordShouldBe.getBytes()));
// [7, -110, 66, -23, 74, 53, -81, -63, -110, 127, 9, -126, -8, -98, -109, -122]
// [85, 50, 70, 115, 100, 71, 86, 107, 88, 49, 47, 121, 66, 107, 118, 56, 82, 70, 88, 113, 53, 122, 85, 80, 103, 87, 87, 73, 99, 69, 76, 43, 105, 53, 57, 122, 43, 73, 119, 102, 114, 89, 115, 61]
Может кто-нибудь помочь мне? Я знаю, что на SO уже есть куча подобных, и я попробовал почти все из них, но не могу уловить подсказку.
РЕШЕНА ПРОБЛЕМА:
Найдено это служебный класс (https://gist.github.com/kientux/bb48259c6f2133e628ad). Удален Android указанный c код и протестирован с обслуживаемым. Это работает отлично, я никогда не думал, что это может быть так сложно.