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

vb2005 RC2復号化について

環境/言語:[OS : Windows XP / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

RC2での復号化で困っています。

http://dobon.net/vb/dotnet/string/encryptfile.html
よりテキストファイルの暗号化を参考にさせていただきました。

***********************************************
''' <summary>
''' ファイルを復号化する
''' </summary>
''' <param name="fileName">復号化するファイル名</param>
''' <param name="key">パスワード</param>
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
If fileName.ToLower().EndsWith(".enc") Then
outFileName = fileName.Substring(0, fileName.Length - 4)
Else
outFileName = fileName + ".dec"
End If
'復号化されたデータを書き出すためのStreamWriter
Dim sw As New System.IO.StreamWriter( _
outFileName, False, System.Text.Encoding.GetEncoding("sjis"))
'復号化されたデータを読み込む
Dim sr As New System.IO.StreamReader( _
cryptStreem, System.Text.Encoding.GetEncoding("sjis"))
'復号化されたデータを書き出す
sw.Write(sr.ReadToEnd())
sw.Flush()

'閉じる
sr.Close()
sw.Close()
cryptStreem.Close()
fsIn.Close()
End Sub
***********************************************

----------------------------------
'復号化されたデータを書き出す
sw.Write(sr.ReadToEnd())
----------------------------------
の部分で
「復号化するデータの長さが無効です。」
とエラーになってしまいます。

このエラーを解決する方法をお教え下さい。
「書き込みのルールについて」に書かれているように、この掲示板では匿名での投稿は禁止されています。今後はお名前を変更してご投稿いただけますように、お願いいたします。また、必ず「書き込みのルールについて」をお読みいただけますように、お願いいたします。

書き込みのルールについて
http://dobon.net/vb/bbs/index.html

> このエラーを解決する方法をお教え下さい。

復号化に失敗するとエラーが出ます。EncryptFileメソッドで暗号化したファイルでないファイルを指定していたり、パスワードが違ったりなどという基本的な原因である事も考えられます。
申し訳ありませんでした。ルールをしっかり理解していませんでした。
大変申し訳有りません。今後は名前を変えます。
改めてトピックを立て直せばよいのかわかりませんがお答えありがとうございます。


>復号化に失敗するとエラーが出ます。EncryptFileメソッドで暗号化したファイルでないファイルを指定していたり、パスワードが違ったりなどという基本的な原因である事も考えられます。


EncryptFileメソッドで暗号化したファイルでないファイルを指定しています。
頂いた暗号化ファイルはRC2で暗号化してあるとだけ聞いていてEncryptFileメソッド
ではないです。そうだとだめなのでしょうか?
初心者過ぎてもうしわけありません。
■No26683に返信(匿名 改め いっちーさんの記事)
> EncryptFileメソッドで暗号化したファイルでないファイルを指定しています。
> 頂いた暗号化ファイルはRC2で暗号化してあるとだけ聞いていてEncryptFileメソッド
> ではないです。そうだとだめなのでしょうか?

いただいたということは自分で暗号化したのではなくて、誰かに送ってもらったファイルとかで、その人がRC2で暗号化してあるといっているということですかね?
送り主に、なんというツールを使って暗号化した、とか、そういう情報をもらってください。

普通、同じツールの復号機能を使うとか、自己復号EXEになっているとか、そういうのが多いように思います。
初めまして、ヌコ村さんです。

コードを拝見すると以下の記述が見られます。

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

上記のコードは、DESアルゴリズムの暗号/復号化用のクラスを使用している様に見受けられます。
RC2アルゴリズムの場合は下記のクラスを使用すると良いのではないでしょうか?

RC2CryptoServiceProvider

※いっちーさんが参考になさったページの下の方にも同様の記述がありますので、もう一度ご確認下さい。
http://dobon.net/vb/dotnet/string/encryptfile.html
なちゃ 様
>送り主に、なんというツールを使って暗号化した、とか、そういう情報をもらってください。
情報をもらって復号化できました。
キーがMD5ハッシュ計算をしていることがわかり解決しました。
ありがとうございました。

ヌコ村さん 様
サンプルをそのまま貼っていたため誤解させてしまってすいません。
RC2CryptoServiceProviderを使用しました。
ありがとうございました。
解決済み!

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