如何在ASP.NET中编码密码字段

时间:2010-12-31 10:42:23

标签: c# asp.net

我有以下代码来编码密码字段,但是当密码字段超过十个字符时会出错。

private string base64Encode(string sData)
    {
        try
        {
            byte[] encData_byte = new byte[sData.Length];

            //encData_byte = System.Text.Encoding.UTF8.GetBytes(sData);
            encData_byte = System.Text.Encoding.UTF8.GetBytes(sData);


            string encodedData = Convert.ToBase64String(encData_byte);
            return encodedData;


        }
        catch (Exception ex)
        {
            throw new Exception("Error in base64Encode" + ex.Message);
        }
    }

这是解码编码值的代码

public string base64Decode(string sData)
    {

        System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();

        System.Text.Decoder utf8Decode = encoder.GetDecoder();

        byte[] todecode_byte = Convert.FromBase64String(sData);

        int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);

        char[] decoded_char = new char[charCount];

        utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);

        string result = new String(decoded_char);

        return result;

    }

3 个答案:

答案 0 :(得分:3)

该代码本身不应该失败 - 但它实际上并没有为密码提供任何保护。我不确定你真正尝试做什么样的“编码”,但这不是不是的方法。的问题:

  • 即使这样有效,从安全的角度来看也很糟糕 - 这不是加密,散列或任何类似的东西
  • 你没有充分的理由分配一个新的字节数组 - 为什么?
  • 你正在捕捉Exception,这几乎总是一个坏主意
  • 您的方法忽略.NET命名约定

如果你能向我们解释一下大局是什么,我们或许可以建议一个更好的方法。

我的猜测是,当你调用Convert.FromBase64String时,你所看到的异常实际,即等效的解码方法告诉我们。

答案 1 :(得分:1)

答案 2 :(得分:0)

他们对此不正确是正确的。但你问的问题是为什么代码失败了。 Base64字符串通常比它们编码的字符串占用更多空间。您试图以较少的字符(64而不是255)存储相同数量的数据,因此它会扩展字符串。由于您根据字符串的大小确定数组的大小,因此只要base 64字符串超过基本255字符串的大小,就会出现错误。不要自己编写代码,而是使用内置转换器。

            System.Convert.ToBase64String()
            System.Convert.FromBase64String()

但正如我之前提到的,这不安全,所以只有在尝试使用遗留系统做某事时才使用它,并且由于某种原因需要保留功能。