2011-03-28 68 views
0

我正在使用.NET加密庫來加密/解密某些文本。我想在加密過程中爲用戶生成Initialization Vector(IV)和Salt,以便他們需要提供的是一個Pass-Phrase。一旦文本被加密,我將向用戶展示Salt值和初始化矢量,以便他們可以將它們傳遞給消息的接收者。在.NET中生成初始化向量(IV)和鹽值

如何使用.NET在實際加密步驟之外生成鹽和初始化向量(IV)?目前我創建的加密/解密方法接受salt和初始化向量作爲參數,如字符串。

我試過使用下面的代碼生成一個初始化向量,但返回值的大小總是比AES中初始化向量所需的16個字節大。

Dim rng As New RNGCryptoServiceProvider() 
Dim buff As Byte() = New Byte(15) {} 
rng.GetBytes(buff) 
Return Convert.ToBase64String(buff) 

回答

1

IV的大小取決於您使用的算法(例如16字節)。這意味着字節數組的大小是固定的,而不是你從中建立的字符串。除非可以將字符串轉換爲具有所需大小的正確字節數組,否則不能將字符串作爲IV傳遞。

+0

這是否意味着表示IV的字符串如果長度超過16個字節會被截斷?也就是說,只使用IV的前16個字節? – webworm 2011-03-28 21:03:47

+0

@webworm - 如果您使用CreateEncryptor方法(http://msdn.microsoft.com/en-us/library/z565ef9x.aspx),則IV的大小是固定的一個字節數組。這是要求。 – 2011-03-28 21:47:20