Я пишу Java-реализацию приложения, изначально написанного на C. Я не могу изменить версию C, и версия Java должна делиться зашифрованными данными с версией C.
Вот соответствующая часть кода шифрования C:
makekeys(password,&key1,&key2); /* turns password into two 8 byte arrays */
fill_iv(iv); /* bytes 8 bytes of randomness into iv */
des_key_sched(&key1,ks1);
des_key_sched(&key2,ks2);
des_ede2_ofb64_encrypt(hashed,ctext,hashedlen,ks1,ks2,
&iv,&num);
Я вижу, что эквивалент JCE - это что-то вроде:
SecretKey key = new SecretKeySpec(keyBytes, "DESede");
IvParameterSpec iv = new IvParameterSpec(new byte[8]);
Cipher cipher = Cipher.getInstance("DESede/?????/?????"); // transformation spec?
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] cipherTextBytes = cipher.doFinal(plaintext);
Вопросы:
- Код C принимает два ключа, JCE - один. Как мне с этим смириться? Просто добавить два в один массив? В каком порядке?
- Какая спецификация преобразования (если есть!) Эквивалентна описанию OpenSSL des_ede2_ofb64_encrypt? Как бы я узнал, кроме как спросить незнакомцев в Интернете? ;)