我正在使用 Rijndael(作为 AES 算法)进行加密。我加密值(对象属性)并将对象序列化为 xml,然后通过 Web 服务将 xml 发送到接收器。我想传递我用来加密数据的加密对称密钥。但是我应该传递什么密钥?我的解密算法如下所示(vb.net):
Public Function Encrypt(ByVal stringToEncrypt As String) As String
Dim textConverter As New ASCIIEncoding()
Dim myRijndael As New RijndaelManaged()
Dim encrypted() As Byte
Dim stringToEncryptAsByte() As Byte
Dim encryptedAsString As String
Dim key() As Byte
Dim IV() As Byte
' Set symetric key size og chiper mode
myRijndael.Mode = CipherMode.CBC
myRijndael.KeySize = 128
' Create a new key and initialization vector.
myRijndael.GenerateKey()
myRijndael.GenerateIV()
' Get the key and IV.
key = myRijndael.Key
IV = myRijndael.IV
' Get an encryptor.
Dim encryptor As ICryptoTransform = myRijndael.CreateEncryptor(key, IV)
' Encrypt the data.
Dim msEncrypt As New MemoryStream()
Dim csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
' Convert the data to a byte array.
stringToEncryptAsByte = textConverter.GetBytes(stringToEncrypt)
' Write all data to the crypto stream and flush it.
csEncrypt.Write(stringToEncryptAsByte, 0, stringToEncryptAsByte.Length)
csEncrypt.FlushFinalBlock()
' Get encrypted array of bytes.
encrypted = msEncrypt.ToArray()
encryptedAsString = Convert.ToBase64String(encrypted)
Return encryptedAsString
End Function
如果我想解密加密的字符串,我必须同时使用密钥和 IV,但我认为我只需要传递一个密钥值。我必须以另一种方式这样做还是应该传递什么?我的规范说必须使用 AES 和 128 位密钥对这些值进行加密。