DOBON.NET DOBON.NETプログラミング掲示板過去ログ

JspからASP.netへの値引継ぎ

環境/言語:[Windows Vista java ASP.net]
分類:[ASP.NET]

環境/言語:[Tomcat, java1.5,ASP.net] 
分類:[ASP.NET] 

初めての ASP.NETの開発で参考にさせて頂いております。

現在Jsp側でDB検索を行い取得したデータを暗号化したdatファイルで
出力しASP.net側で復号化を行う処理を行おうとしているのですが、
データが正しくありません。というエラーが発生し出力したファイルの
内容も復号化できていない状態です。
Jspで暗号化したものをASP.net側で復号化することはできないのでしょうか?

宜しくお願い致します。

実際のソースものせておきます。

【JSP側】

String key = "abcd1234";

Cipher ctes = Cipher.getInstance("DES");
SecretKeyFactory keyFac = SecretKeyFactory.getInstance("DES");
DESKeySpec keySpec = new DESKeySpec(key.getBytes());
SecretKey secKey = keyFac.generateSecret(keySpec);

ctes.init(Cipher.ENCRYPT_MODE,secKey);

OutputStream xmle = new CipherOutputStream(new FileOutputStream(filePath),ctes);
Writer fw = new OutputStreamWriter(xmle);

fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
fw.write("<venture>\n");
fw.write("<company>\n");
fw.write("<name>XXX1株式会社</name>\n");
fw.write("</company>\n");
fw.write("<company>\n");
fw.write("<name>XXX2株式会社</name>\n");
fw.write("</company>\n");
fw.write("<company>\n");
fw.write("<name>XXX3株式会社</name>\n");
fw.write("</company>\n");
fw.write("<company>\n");
fw.write("<name>XXX4株式会社</name>\n");
fw.write("</company>\n");
fw.write("<company>\n");
fw.write("<name>" + filePath + "</name>\n");
fw.write("</company>\n");
fw.write("</venture>\n");

fw.close();

 response.sendRedirect("http://localhost:52605/Login.aspx?
 filepath=" + filePath);

【ASP.net側】

Dim filePath As String = Request.QueryString("filepath").ToString

filePath = filePath.Substring(2)
Dim xmlFilePath As String = "C:\Program Files\Apache Software
Foundation\Tomcat 5.5\" & filePath

DecryptFile(xmlFilePath, "abcd1234")


Public Shared Sub DecryptFile(ByVal fileName As String, _
ByVal key As String)

'DESCryptoServiceProviderオブジェクトの作成
Dim des As New System.Security.Cryptography.DESCryptoServiceProvider

'共有キーと初期化ベクタを決定
'パスワードをバイト配列にする
Dim bytesKey As Byte() = System.Text.Encoding.UTF8.GetBytes(key)

'共有キーと初期化ベクタを設定
des.Key = ResizeBytesArray(bytesKey, des.Key.Length)
des.IV = ResizeBytesArray(bytesKey, des.IV.Length)

'暗号化されたファイルを読み込むためのFileStream
Dim fsIn As New System.IO.FileStream(fileName, _
System.IO.FileMode.Open, System.IO.FileAccess.Read)

'DES復号化オブジェクトの作成
Dim desdecrypt As System.Security.Cryptography.ICryptoTransform = _
des.CreateDecryptor()

'読み込むためのCryptoStreamの作成
Dim cryptStreem As New System.Security.Cryptography.CryptoStream( _
fsIn, desdecrypt, _
System.Security.Cryptography.CryptoStreamMode.Read)

'復号化されたファイルの保存先
Dim outFileName As String
Dim strExt As String = ""

If fileName.ToLower().EndsWith(".dat") Then

strExt = System.IO.Path.GetExtension(fileName)
outFileName = "sampleFile.xml"

Else

strExt = System.IO.Path.GetExtension(fileName)
outFileName = fileName.Replace(strExt, String.Empty) + ".err"

End If '復号化されたファイルを書き出すためのFileStream

Dim fsOut As New System.IO.FileStream(outFileName, _
System.IO.FileMode.Create, System.IO.FileAccess.Write)


'復号化されたデータを書き出す
Dim bs(255) As Byte
Dim readLen As Integer

Try
Do
readLen = cryptStreem.Read(bs, 0, bs.Length)
If readLen > 0 Then
fsOut.Write(bs, 0, readLen)
End If
Loop While (readLen > 0)
Catch

Finally

'閉じる
cryptStreem.Close()
fsIn.Close()
fsOut.Close()

End Try

End Sub
Java の暗号化には詳しくありませんが、暗号化時の IV はどうなっているのでしょうか?
// 未指定の場合 key と同じになるという実装なら確かに復号側処理と同じになりますが……。
あとは暗号化アルゴリズムのモード及びパディングが合致しているかどうかも確認事項ですね。Cipher.getInstance の引数で特に指定しない場合は暗号プロバイダ依存だそうですが。
Hongliangさん有難うございました。

暗号化時のIVの値をVB.net側に渡すことと暗号化時の
バイト数を設定?することにより復号化することができました。

本当に助かりました。有難うございました。
すいません。解決済みにするのを忘れていました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板