質問

いて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バイト、あるいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top