1

问:

我想问是否有一个用于加密和解密字符串的类,我在网上搜索,我找到了一些但它们不太安全或在完成过程中有一些问题:

我之前发现的一类是:

public static string Encrypt(string text) {

        try
        {
            key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            Byte[] byteArray = Encoding.UTF8.GetBytes(text);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
            cryptoStream.Write(byteArray, 0, byteArray.Length);
            cryptoStream.FlushFinalBlock();
            return Convert.ToBase64String(memoryStream.ToArray());
        }

        catch (Exception ex)
        {
          string message =  ex.Message;
        }

        return string.Empty;
    }



    public static string Decrypt(string text)
    {
        try
        {
            key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            Byte[] byteArray = Convert.FromBase64String(text);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
            des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
            cryptoStream.Write(byteArray, 0, byteArray.Length);
            cryptoStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(memoryStream.ToArray());
        }

        catch (Exception ex)
        {
            string message = ex.Message;


        }` 

关于这门课的一些评论是:

我搜索了一个类来完成没有这些问题的加密和解密,如果对这个类进行任何修改或增强以避免这些问题并使其更安全,那就太好了。

如果有其他类经过长期测试和使用以确保其稳定性,那就太好了..

4

2 回答 2

2

该代码对于密码来说还不够好。

让我从您链接到的 Coding Horror 文章中引用 Jeff 的话:

您永远不应该存储用户密码。如果这样做,则说明您存储的密码不正确。始终存储密码的加盐哈希值——永远不要存储密码本身!这很容易,即使是 Mensa er 的成员 .. 也无法 .. 弄清楚。

密码不应以可以检索的方式存储。加密没关系。加密是一个双向过程。您必须进行一些无法从中恢复原始密码的单向转换。就像 Jeff 建议的那样,使用salt散列。为了验证密码,您将相同的单向过程应用于输入并与您存储的值进行比较。您永远不会恢复存储的密码以与输入进行比较。

于 2011-01-04T12:36:12.837 回答
1

您可以查看 System.Security.Cryptography 命名空间,.NET 框架提供了很多选项。

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx

于 2011-01-04T12:22:58.103 回答