AES-192-ECB шифруется в криптографии node.js и дешифруется в Java - PullRequest
1 голос
/ 09 июня 2019

Я отказываюсь от попыток найти решение относительно моей проблемы. Я выполнил свою часть и искал эту проблему и нашел решения (например, 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.

Я на правильном пути? Кто-нибудь может направить меня?

Спасибо!

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