我在.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)
用于对称加密的AES算法通常是对字符串进行通用加密的方法。然而,恐怕.NET BCL 并没有为您提供基本的加密/解密类和函数来进一步简化事情。
您可以在此页面上找到有关如何使用专门用于字符串加密的加密类的好示例。它看起来非常完整并且评论确实很好 - 您甚至可能会发现无需任何进一步修改即可使用它。注意:Rijndael与AES是相同的算法。(从技术上来说,前者是指算法的真实名称,后者是高级加密标准。)
归档时间: |
|
查看次数: |
1570 次 |
最近记录: |