- PR -

DES でテキストをC#で暗号化、Javaで復号化する方法

1
投稿者投稿内容
t_uchima
会議室デビュー日: 2004/06/05
投稿数: 2
投稿日時: 2007-09-16 10:07
はじめまして。

C#でDESによるテキストデータを暗号化しJavaで復号化しようとしています。各ソースは下記URLの通りです。

・C#でDESによるテキストデータを暗号化
http://dobon.net/vb/dotnet/string/encryptstring.html

・JavaでDESによるテキストデータを復号化
http://perltips.twinkle.cc/java/aes_des_encrypt_decrypt.php

同じ8byteの暗号鍵を使っているのですがJava側で期待通りのテキストへ複合化されません。ちなみに先に上げたソースを用いてC#とJavaで同じテキストデータを暗号化すると違う値の暗号化されたデータが返ってきます。Javaのソースに用いられている暗号化、複合化のロジックが異なっているのでしょうか?

どなたかJavaの暗号化について詳しい方がいらっしゃいましたら期待通りの複合化が出来る方法を教えて頂けませんでしょうか。

宜しくお願いします。
yas
会議室デビュー日: 2007/09/16
投稿数: 1
投稿日時: 2007-09-16 13:05
こんにちは、Perl Tips の作者です。

C# の EncryptString と、Java の decrypt はそのままでは互換性がありません。
C# の EncryptString では、この処理の最後でご丁寧に Base64 に変換した文字列を返しているからです。


#####



Public Shared Function EncryptString(ByVal str As String, _
ByVal key As String) As String
...

'Base64で文字列に変更して結果を返す
Return System.Convert.ToBase64String(bytesOut)
End Function

Public Shared Function DecryptString(ByVal str As String, _
ByVal key As String) As String

...

'Base64で文字列をバイト配列に戻す
Dim bytesIn As Byte() = System.Convert.FromBase64String(str)

...

End Function


#####


従って、Java の方の decrypt 内でまず、Base64 をデコードする処理をしないといけません。
もしこれに気づいてすでに対処をしてもNGの場合は、C# と Java の DES の仕様(3DES だったり?)が一致しているかご自身で確認してみてください。
t_uchima
会議室デビュー日: 2004/06/05
投稿数: 2
投稿日時: 2007-09-21 08:58
yasuさん返答ありがとうございます。

色々調べてみたのですがDES暗号化のアルゴリズムをC#とJavaで一致させる方法がわかりませんでした。DESは諦めてAESを採用しようと思っています。幸いにもAESに関してはC#とJavaのサンプルコードがSUNのDeveloper Forumsで公開されていました。

http://forum.java.sun.com/thread.jspa?threadID=603209&messageID=3248903

これを参考に開発していく事にしました。
1

スキルアップ/キャリアアップ(JOB@IT)