暗号化されたXMLファイルを復号し、メモリストリーム経由でデシリアライザに渡すという処理を書こうとして、どうもうまくいかない。ファイルをストリームに読み込んだ時点では448バイトなのだが、復号ストリームを通すと440バイトになる。念のため、出てきたMemoryStreamをStreamReaderに読み込ませてテキストに書き出すと、やはり最後の数文字が切れている。なんで?
Dim sourceBytes(CInt(fileIn.Length) - 1) As Byte 'ファイル格納バイトにファイル情報を格納する fileIn.Read(sourceBytes, 0, sourceBytes.Length) 'その他変数定義 Dim encDES As DESCryptoServiceProvider = SetUpCrypt() Dim encStream As New CryptoStream(memoryOut, encDES.CreateDecryptor, CryptoStreamMode.Write) 'ファイルを読み込んで、復号して出力する encStream.Write(sourceBytes, 0, sourceBytes.Length) encStream.FlushFinalBlock() Return memoryOut
答えは、読み出しブロックサイズ未満の読み残しがストリームに残っていた、だったようだ。http://www.microsoft.com/japan/msdn/vbasic/migration/tips/SecretKeyCryptosystem/ をみて、FlushFinalBlockの存在に気づく。早速やってみる。うまくいった。ソースは上記の通り。