Шифрование и дешифрование данных с помощью транспорта через Java в Node.js
Я пытаюсь отправить данные из Java (Android) в приложение Node.js, за исключением того, что шифрование не работает, и Node.js не расшифровывает должным образом, и я действительно не имею понятия, что я делаю.
Джава:
// Encrypt
byte[] input = jo.toString().getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(ENCRYPTION_KEY.getBytes("UTF-8"));
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES/ECB/PKCS5Padding");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skc);
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
String query = Base64.encodeToString(cipherText, Base64.DEFAULT);
query
затем отправляется на наш сервер и jo
является JSONObject
И в Узле я делаю:
var decipher = crypto.createDecipher('aes-128-ecb', encryption_key);
console.log("System: " + new Buffer(fullBuffer, "base64").toString("binary") );
chunks = []
chunks.push( decipher.update( new Buffer(fullBuffer, "base64").toString("binary") , 'hex', 'utf-8') );
chunks.push( decipher.final('utf-8') );
var txt = chunks.join("");
console.log("System: " + txt);
js = JSON.parse(txt);
console.log("System: " + js);
А также fullBuffer
это полученные данные POST, которые правильно передаются
1 ответ
Решение
Шифрование и аутентификация являются жестокими для отладки, потому что любая ошибка, которую вы делаете, приводит к рандомизации всего вывода. Предложения:
- Переключитесь на незашифрованное преобразование, такое как Base64 или gzip, чтобы вы могли видеть, как выглядит ваш вывод.
- Попробуйте выяснить, какая половина сломана. Захватите ваш сервер и расшифруйте его с помощью openssl или python. Сгенерируйте хороший вход с одним из них и вставьте его в свой клиент.
- CBC гораздо безопаснее, чем ЕЦБ.
- Если все это не помогает, шаг в шифр низкого уровня и расшифровать и убедитесь, что ключи и шифртексты точно соответствовать содержанию и длиной, и косоглазие при выборе алгоритма долго и упорно.