我的老板希望我加密在数据传输过程中使用的一些信息。要加密的单个字符串长度在8到20个字符之间。必须使用单个密码进行加密和解密,因此我需要对称算法。我不想自己编写算法 - 我想从C#中使用内置的算法。
那么,哪种算法最好呢?
TripleDes?
您可以使用System.Security.Cryptography.TripleDESCryptoServiceProvider
。
只需少量代码即可加密/解密...功能与名称相符:)
.net安全类:
哈希
* MD5
* MD5Cng
* SHA1
* SHA1Managed
* SHA1Cng
* SHA256
* SHA256Managed
* SHA256Cng
* SHA384
* SHA384Managed
* SHA384Cng
* SHA512
* SHA512Managed
* SHA512Cng
对称加密:使用相同的密钥进行加密和解密。
* DES
* DESCryptoServiceProvider
* TripleDES
* TripleDESCryptoServiceProvider
* Aes
* AesCryptoServiceProvider
* AesManaged
* RC2
* RC2CryptoServiceProvider
* Rijandel
* RijandelManaged
非对称加密:使用不同的密钥进行加密和解密。
* DSA
* DSACryptoServiceProvider
* ECDsa
* ECDsaCng
* ECDiffieHellman
* ECDiffieHellmanCng
* RSA
* RSACryptoServideProvider
这里是使用DES3加密的加密和解密函数。
''' <summary>
''' Encrypts a memory string (i.e. variable).
''' </summary>
''' <param name="data">String to be encrypted.</param>
''' <param name="key">Encryption key.</param>
''' <param name="iv">Encryption initialization vector.</param>
''' <returns>Encrypted string.</returns>
Public Shared Function Encrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String
Dim bdata As Byte() = Encoding.ASCII.GetBytes(data)
Dim bkey As Byte() = HexToBytes(key)
Dim biv As Byte() = HexToBytes(iv)
Dim stream As MemoryStream = New MemoryStream
Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateEncryptor(bkey, biv), CryptoStreamMode.Write)
encStream.Write(bdata, 0, bdata.Length)
encStream.FlushFinalBlock()
encStream.Close()
Return BytesToHex(stream.ToArray())
End Function
''' <summary>
''' Decrypts a memory string (i.e. variable).
''' </summary>
''' <param name="data">String to be decrypted.</param>
''' <param name="key">Original encryption key.</param>
''' <param name="iv">Original initialization vector.</param>
''' <returns>Decrypted string.</returns>
Public Shared Function Decrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String
Dim bdata As Byte() = HexToBytes(data)
Dim bkey As Byte() = HexToBytes(key)
Dim biv As Byte() = HexToBytes(iv)
Dim stream As MemoryStream = New MemoryStream
Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateDecryptor(bkey, biv), CryptoStreamMode.Write)
encStream.Write(bdata, 0, bdata.Length)
encStream.FlushFinalBlock()
encStream.Close()
Return Encoding.ASCII.GetString(stream.ToArray())
End Function
你可以使用RSA加密,因为这些是短字符串,这将使密钥交换更简单。
RSA加密的加密量取决于密钥长度。
我是Bouncy Castle库中rsa库的粉丝。
DES现在基本上已经过时了。这里是Wikipedia。如果你需要频繁更换密钥,那么DES可能还可以,但是如果你要长期依赖一个密钥,AES似乎是更好的选择。
当然这也取决于你需要多少保护。但是AES也是内置的。
我已经使用AES加密了一些小字符串,它的效果很不错。
根据我所了解的TripleDES,由于DES很容易被破解,因此TripleDES仍然不太可靠。