在.NET中加密短字符串的最佳方法是什么?

时间:2009-05-10 16:39:57

标签: c# .net security

我的老板要我加密数据传输过程中使用的一些信息。要加密的各个字符串长度在8到20个字符之间。必须使用单个密码进行加密和解密,因此我需要一个对称的算法。我不想自己动手 - 我想使用C#中内置的.NET。

那么,哪种算法最好?

6 个答案:

答案 0 :(得分:8)

TripleDes?

您可以使用System.Security.Cryptography.TripleDESCryptoServiceProvider

加密/解密的少量代码......完全按照它在锡上所说的那样:)

答案 1 :(得分:6)

TripleDES是一个非常好的选择,但您也可以考虑使用AesCryptoServiceProvider(AES),这是一种现代对称密码。

答案 2 :(得分:3)

.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

答案 3 :(得分:3)

这是加密&用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

答案 4 :(得分:1)

您可以使用RSA加密,因为这些是短字符串,这将使密钥交换更简单。

使用RSA加密的程度取决于密钥长度。

我是充气城堡的rsa图书馆的粉丝。

答案 5 :(得分:0)

目前,DES已经过时了。这是Wikipedia。如果你经常更换密钥,可能就足够了,但如果你依赖密钥一段时间,AES似乎是一个更好的选择。

当然,这是一个需要多少保护的问题。但AES也在那里建立。

我已经将AES用于小字符串,并且效果很好。

我读到的有关TripleDES的内容是,由于DES很容易破解,因此TripleDES仍然不大。