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

46qrfjad  于 2023-01-10  发布在  .NET
关注(0)|答案(6)|浏览(140)

我的老板想让我加密一些数据传输过程中使用的信息。要加密的字符串长度在8到20个字符之间。加密和解密必须使用一个密码,所以我需要一个对称算法。我不想自己动手-我想使用一个从C#内置到.NET中的算法。
那么,哪种算法最好呢?

v1l68za4

v1l68za41#

三人组?
您可以使用System.Security.Cryptography.TripleDESCryptoServiceProvider
少量的代码来加密/解密...完全按照锡上说的做:)

s2j5cfk0

s2j5cfk02#

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

q3aa0525

q3aa05253#

.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
7uzetpgm

7uzetpgm4#

这里是加密和解密函数与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
j13ufse2

j13ufse25#

您可以只使用RSA加密,因为这些是短字符串,这将使密钥交换更简单。
可以使用RSA加密的程度取决于密钥长度。
我是充气城堡rsa图书馆的粉丝。

yizd12fk

yizd12fk6#

DES在这一点上已经过时了。下面是Wikipedia。如果你经常改变密钥,它可能是足够的,但是如果你暂时依赖一个密钥,AES似乎是一个更好的选择。
当然,这是一个你需要多少保护的问题,但是AES也是内置的。
我用AES处理小字符串,效果很好。
我所读到的关于TripleDES的内容是,由于DES很容易被破解,TripleDES仍然不是实质性的。

相关问题