После просмотра нескольких примеров я собрал вместе несколько методов шифрования / дешифрования, которые используют Rfc2898DeriveBytes
для получения ключа и вектора инициализации.Я обеспокоен тем, что сторона, получающая мой зашифрованный контент, должна иметь возможность расшифровать его.Поскольку я не могу контролировать, какой язык они используют (может быть Java, PHP, C и т. Д.), Как я могу гарантировать, что они могут получить ключ и вектор инициализации (IV), как я использую Rfc2898DeriveBytes
класс в .NET?Вот методы шифрования и дешифрования, которые я использую.
Public Shared Function EncryptText(ByVal plainText As String, ByVal password As String) As String
Dim aesCrypto As Rijndael = Nothing
Dim plainTextBytes As Byte()
plainTextBytes = Encoding.Default.GetBytes(plainText)
Dim rfc2898 As Rfc2898DeriveBytes
rfc2898 = New Rfc2898DeriveBytes(password, GenerateSalt(password))
aesCrypto = Rijndael.Create()
aesCrypto.Padding = PaddingMode.ISO10126
Dim tx As ICryptoTransform
tx = aesCrypto.CreateEncryptor(rfc2898.GetBytes(32), rfc2898.GetBytes(16))
Dim encryptedBytes As Byte()
encryptedBytes = tx.TransformFinalBlock(plainTextBytes, 0, plainTextBytes.Length)
Return Convert.ToBase64String(encryptedBytes)
End Function
Public Shared Function DecryptText(ByVal encryptedText As String, ByVal password As String) As String
Dim aesCrypto As Rijndael = Nothing
Dim encryptedTextBytes As Byte()
encryptedTextBytes = Convert.FromBase64String(encryptedText)
Dim rfc2898 As Rfc2898DeriveBytes
rfc2898 = New Rfc2898DeriveBytes(password, GenerateSalt(password))
aesCrypto = Rijndael.Create()
aesCrypto.Padding = PaddingMode.ISO10126
Dim tx As ICryptoTransform
tx = aesCrypto.CreateEncryptor(rfc2898.GetBytes(32), rfc2898.GetBytes(16))
Dim decryptedBytes As Byte()
decryptedBytes = tx.TransformFinalBlock(encryptedTextBytes, 0, encryptedTextBytes.Length)
Return Encoding.Default.GetString(decryptedBytes)
End Function