もともと C で書かれたアプリの Java 実装を書いています。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 コードは 2 つのキーを取り、JCE は 1 つを取ります。どうすればこれを調整できますか? 2つを1つの配列に追加するだけですか?どの順番で?
- OpenSSL の des_ede2_ofb64_encrypt と同等の変換仕様 (もしあれば!) は? インターネットで見知らぬ人に尋ねる以外に、どうすればわかりますか? ;)