我試圖使用對稱加密來加密一些數據,並存儲解密數據到MemoryStream中所需的密鑰。 (雖然我知道這一點在安全方面確實很愚蠢,但我將使用RSA來加密對稱密鑰。不過,現在我試圖讓這部分工作。)在VB.NET中,將AES密鑰和加密數據寫入同一個MemoryStream不起作用
I使用FileHelpers庫解析我的分隔符(分號,因爲我不認爲我會在數據中有分號)的數據。不幸的是,在我的解密函數中,當它解析時,它只返回一條記錄。而且,如果我顯示在該函數結尾處創建的整個加密數據字符串,它似乎不會使用多個記錄。
我想知道是否當我創建新的cryptostream時,它默認爲內存流的開始,所以當我編寫我的加密數據時,它會覆蓋剛剛寫入內存流的數據。你認爲這是對的嗎?
感謝您的幫助!
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
我正在寫密鑰和IV到內存流,因爲我想保持這樣的數據可以解密。我的目標是每次隨機生成對稱密鑰,然後用戶使用RSA密鑰對其進行加密。因此,我需要用加密數據存儲對稱密鑰。 –
@Sam,那個內存流應該只能被加密流用來寫加密的數據(並且爲你讀取加密的數據)。如果要存儲IV和密鑰,請使用不同的緩衝區,然後將其附加到從內存流中讀取的加密數據 –
@Sam,添加了獲取IV,密鑰和加密數據的示例 –