質問
いてC++のモジュールと暗号化/復号を用いるopensslライブラリ(DES暗号化).ようにしている翻訳するコードをjavaにならないようにしたいなDLL、JNI。C++のコードは次のように記述されています。
des_string_to_key(reinterpret_cast<const char *>(key1), &initkey);
des_string_to_key(reinterpret_cast<const char *>(key2), &key);
key_sched(&key, ks);
// ...
des_ncbc_encrypt(reinterpret_cast<const unsigned char *>(tmp.c_str()),
reinterpret_cast< unsigned char *>(encrypted_buffer), tmp.length(), ks, &initkey,
DES_ENCRYPT);
return base64(reinterpret_cast<const unsigned char *>(encrypted_buffer), strlen(encrypted_buffer));
Javaコードを次のように記述されています。
Cipher ecipher;
try {
ecipher = Cipher.getInstance("DES");
SecretKeySpec keySpec = new SecretKeySpec(key, "DES");
ecipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] utf8 = password.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
return new sun.misc.BASE64Encoder().encode(enc);
}
catch {
// ...
}
いいDES暗号化Javaのか簡単に、かつてと同じ結果と上記のコード方法が全くない、ということでしょうか?何が面倒くさい、特にこのC++版を利用2鍵がJava版のみを使用して1。のについてお答えDESにCBCモードのはかなり満足のいくもんですか。ここでの詳細についてのコード:unsigned char key1[10]={0};unsigned char key2[50]={0};
int i;
for (i=0;i<8;i++)
key1[i] = 31+int((i*sqrt((double)i*5)))%100;
key1[9]=0;
for (i=0;i<48;i++)
key2[i] = 31+int((i*i*sqrt((double)i*2)))%100;
key2[49]=0;
...
// Initialize encrypted buffer
memset(encrypted_buffer, 0, sizeof(encrypted_buffer));
// Add begin Text and End Text to the encrypted message
std::string input;
const char beginText = 2;
const char endText = 3;
input.append(1,beginText);
input.append(bufferToEncrypt);
input.append(1,endText);
// Add padding
tmp.assign(desPad(input));
des_ncbc_encrypt(reinterpret_cast<const unsigned char *>(tmp.c_str()),
reinterpret_cast< unsigned char *>(encrypted_buffer), tmp.length(), ks, &initkey,
DES_ENCRYPT);
...
から何を読んで、必要56(または64では明らかでない)ビット長が、ここで48バイトの長さです。
解決
いるOpenSSLの専門家がいらっしゃるかと思いのC++コードでDESにCBCモードが必IV(そのinitKeyだろうが、そう思いまだにキー).について知っておきましょ権を変更する必要があるソースコードを使用DESにCBCモードにおいても、その後のJavaコードのものが必要となる暗号鍵とIV.
他のヒント
また、こんなに使用。misc.* 授業コード.この休みにほかの仮想マシンとしてこれらは公共のApiを用意しています。Apache Commonsコーデック(その他)の実装Base64ないこの問題です。
んだシングルDESう複数の鍵となります。場合もございますクリアできましたトリプルDES、ダウンロードいただけまうモーバイルコンピューティングキーとデータフォーマットのデータ)により別途キーとは、"Java暗号化APIに含まれています。
のアルゴリズムを一致させる必要があ;だって異なる結果であるというのだ取り扱いをキーにします。またJavaの文字2バイトの長さは、C++の字は1バイト、あるいです。