対称暗号化を使用して一部のデータを暗号化し、データを使用して復号化するために必要なキーをMemoryStreamに保存しようとしています。(これだけでもセキュリティの面で非常に馬鹿げていることはわかっていますが、RSAを使用して対称鍵を暗号化します。ただし、今はこの部分を機能させようとしています。)
FileHelpersライブラリを使用して、区切り文字のデータを解析しています(データにセミコロンが含まれるとは思わないため、セミコロン)。残念ながら、私の復号化関数では、解析中に1つのレコードしか返されません。また、この関数の最後に作成された暗号化されたデータの文字列全体を表示すると、複数のレコードを使用しているようには見えません。
新しい暗号化ストリームを作成すると、デフォルトでメモリストリームの先頭に設定されるので、暗号化されたデータを書き込むと、メモリストリームに書き込んだばかりのデータが上書きされるのではないかと思います。そうだと思いますか?
ご協力いただきありがとうございます!
Private Function Encrypt(ByVal data As String) As String
Dim utf8 As New UTF8Encoding
' Convert string data to byte array
Dim inBytes() As Byte = utf8.GetBytes(data)
' Create memory stream for storing the data we've manipulated
Dim ms As New MemoryStream()
Dim aes As New RijndaelManaged()
aes.KeySize = 256
Dim cs As New CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)
' Write key to beginning of memory stream
ms.Write(aes.Key, 0, aes.Key.Length)
' Add semicolon delimiter to memory stream
ms.Write(utf8.GetBytes(";"), 0, utf8.GetBytes(";").Length)
' Write IV to memory stream
ms.Write(aes.IV, 0, aes.IV.Length)
' Write semicolon delimiter to memory stream
ms.Write(utf8.GetBytes(";"), 0, utf8.GetBytes(";").Length)
' Ensure that the data we've just written is in the memory stream, before
' we add the encrypted data
ms.Flush()
' Write the encrypted data
cs.Write(inBytes, 0, inBytes.Length) ' encrypt
cs.FlushFinalBlock()
' Return encrypted data as string
Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)
End Function