Я отказываюсь от попыток найти решение относительно моей проблемы. Я выполнил свою часть и искал эту проблему и нашел решения (например, https://stackoverflow.com/a/21252990/5328303), которая действительно была той же самой проблемой, что и моя, но он использует aes-128-ecb.
Я не могу заставить решение работать в режиме aes-192-ecb.
Вот часть node.js (обратите внимание, я не могу изменить эту часть кода, поскольку это сторонний поставщик, и я очень ограничен.)
console.log(encrypt("hello world"))
function encrypt(data) {
const aesKey = '4327601417486622'
const algorithm = 'aes-192-ecb'
const cipher = crypto.createCipher(algorithm, aesKey)
const crypted = cipher.update(data, 'utf-8', "hex") + cipher.final("hex")
return crypted
}
// expected: 066c47b162cd5c464ea9805742c1af9b
А вот моя функция Java:
public static String decrypt(String seed, String encrypted) throws Exception {
byte[] keyb = seed.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(keyb);
SecretKeySpec skey = new SecretKeySpec(thedigest, "AES");
Cipher dcipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, skey);
byte[] clearbyte = dcipher.doFinal(toByte(encrypted));
return new String(clearbyte);
}
Приведенный выше Java-код хорошо работает, если я использую aes-128-ecb в своем коде узла, но не могу декодировать, когда я использую aes-192-ecb или даже aes-256-ecb.
Может быть, я просто не совсем понимаю функцию openssl EVP_BytesToKey
, так как прочитал, что crypto.createCipher()
использует ее при шифровании. Он также сказал, что хэширует ключ с помощью MD5, который я сейчас делаю с Java-кодом.
Также я думал, что aesKey
, который у меня есть, составляет всего 16 байт, и, возможно, именно поэтому он не будет работать с AES-192 и работает только с AES-128. Я хочу понять, как openssl / crypto делает это, когда я передаю только 16-байтовый ключ с требуемым 24-байтовым ключом для AES-192, поскольку я не могу изменить код node.js.
Я на правильном пути? Кто-нибудь может направить меня?
Спасибо!