一般字符串加密

use*_*370 5 .net cryptography

我在.NET中寻找一般的字符串加密类.(不要与'SecureString'类混淆.)

我已经开始提出自己的类,但是认为必须有一个.NET类,它已经允许你使用任何加密服务提供程序加密/解密任何编码的字符串.

Public Class SecureString

        Private key() As Byte
        Private iv() As Byte
        Private m_SecureString As String

        Public ReadOnly Property Encrypted() As String
            Get
                Return m_SecureString
            End Get
        End Property

        Public ReadOnly Property Decrypted() As String
            Get
                Return Decrypt(m_SecureString)
            End Get
        End Property

        Public Sub New(ByVal StringToSecure As String)
            If StringToSecure Is Nothing Then StringToSecure = ""
            m_SecureString = Encrypt(StringToSecure)
        End Sub

        Private Function Encrypt(ByVal StringToEncrypt As String) As String

            Dim result As String = ""
            Dim bytes() As Byte = Text.Encoding.UTF8.GetBytes(StringToEncrypt)

            Using provider As New AesCryptoServiceProvider()

                With provider
                    .Mode = CipherMode.CBC                  
                    .GenerateKey()
                    .GenerateIV()
                    key = .Key
                    iv = .IV
                End With

                Using ms As New IO.MemoryStream
                    Using cs As New CryptoStream(ms, provider.CreateEncryptor(), CryptoStreamMode.Write)
                        cs.Write(bytes, 0, bytes.Length)
                        cs.FlushFinalBlock()
                    End Using
                    result = Convert.ToBase64String(ms.ToArray())
                End Using

            End Using

            Return result

        End Function

        Private Function Decrypt(ByVal StringToDecrypt As String) As String

            Dim result As String = ""
            Dim bytes() As Byte = Convert.FromBase64String(StringToDecrypt)

            Using provider As New AesCryptoServiceProvider()

                Using ms As New IO.MemoryStream
                    Using cs As New CryptoStream(ms, provider.CreateDecryptor(key, iv), CryptoStreamMode.Write)
                        cs.Write(bytes, 0, bytes.Length)
                        cs.FlushFinalBlock()
                    End Using
                    result = Text.Encoding.UTF8.GetString(ms.ToArray())
                End Using

            End Using

            Return result

        End Function

    End Class
Run Code Online (Sandbox Code Playgroud)

Nol*_*rin 4

用于对称加密的AES算法通常是对字符串进行通用加密的方法。然而,恐怕.NET BCL 并没有为您提供基本的加密/解密类和函数来进一步简化事情。

您可以在此页面上找到有关如何使用专门用于字符串加密的加密类的好示例。它看起来非常完整并且评论确实很好 - 您甚至可能会发现无需任何进一步修改即可使用它。注意:Rijndael与AES是相同的算法。(从技术上来说,前者是指算法的真实名称,后者是高级加密标准。)