加密和解密类?

时间:2011-01-04 12:17:49

标签: asp.net security encryption decoding

问:

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

我之前找到的一个课程是:

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;


        }` 

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

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

如果有其他课程经过长时间的测试和使用以确保其稳定性,那就太棒了..

2 个答案:

答案 0 :(得分:2)

该密码无法用于密码。

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

  

您永远不应该永远存储用户密码。如果这样做,您将错误地存储密码。始终存储密码的盐渍哈希 - 从不密码本身!这很容易,即使是Mensa的成员......也无法解决这个问题。

密码不应以可以检索的方式存储。加密它并不重要。加密是一个双向过程。您必须进行一些无法从中恢复原始密码的单向转换。与Jeff建议的一样,请将hashingsalt一起使用。为了验证密码,您将相同的单向过程应用于输入,并与您存储的值进行比较。您从不恢复存储的密码以与输入进行比较。

答案 1 :(得分:1)

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

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