Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET中对密码字段进行编码_C#_Asp.net - Fatal编程技术网

C# 如何在ASP.NET中对密码字段进行编码

C# 如何在ASP.NET中对密码字段进行编码,c#,asp.net,C#,Asp.net,我有下面的代码来编码密码字段,但当密码字段超过10个字符时,它会出错 private string base64Encode(string sData) { try { byte[] encData_byte = new byte[sData.Length]; //encData_byte = System.Text.Encoding.UTF8.GetBytes(sData); en

我有下面的代码来编码密码字段,但当密码字段超过10个字符时,它会出错

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;

    }

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

即使这样做有效,从安全的角度来看,这也很糟糕——这不是加密、哈希或任何类似的东西 你分配一个新的字节数组没有好的理由-为什么? 您正在捕获异常,这几乎总是一个坏主意 您的方法忽略.NET命名约定 如果你能向我们解释一下大局是什么,我们可能会提出更好的方法


我的猜测是,当您调用Convert.FromBase64String时,您看到的异常实际上出现了,也就是说,在您没有向我们展示的等效解码方法中。

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

即使这样做有效,从安全的角度来看,这也很糟糕——这不是加密、哈希或任何类似的东西 你分配一个新的字节数组没有好的理由-为什么? 您正在捕获异常,这几乎总是一个坏主意 您的方法忽略.NET命名约定 如果你能向我们解释一下大局是什么,我们可能会提出更好的方法


我的猜测是,当您调用Convert.FromBase64String时,您看到的异常实际上出现了,即在您没有向我们展示的等效解码方法中。

我认为您需要修改代码

这是两个链接,提供了更多细节-


我想你需要修改你的代码

这是两个链接,提供了更多细节-


他们认为这不安全是正确的。但是你问的问题是为什么代码失败了。Base64字符串通常比它们编码的字符串占用更多的空间。您试图用更少的字符64而不是255来存储相同数量的数据,因此它会扩展字符串。由于您是根据字符串的大小对数组进行尺寸标注,因此,任何时候基64字符串超过基255字符串的大小时,都会出现错误。不要自己编写代码,而是使用内置转换器

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

但正如我前面提到的,这是不安全的,所以只有当您试图对遗留系统执行某些操作,并且出于某种原因需要保留功能时,才可以使用它。

他们认为这是不安全的。但是你问的问题是为什么代码失败了。Base64字符串通常比它们编码的字符串占用更多的空间。您试图用更少的字符64而不是255来存储相同数量的数据,因此它会扩展字符串。由于您是根据字符串的大小对数组进行尺寸标注,因此,任何时候基64字符串超过基255字符串的大小时,都会出现错误。不要自己编写代码,而是使用内置转换器

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

但正如我前面提到的,这是不安全的,因此只有在您试图对遗留系统执行某些操作,并且出于某种原因需要保留功能时,才可以使用它。

错误是什么?您不应该捕获异常并抛出一个新的异常,您在这里丢失了很多信息。这是Base-64字符数组的异常无效长度。错误是什么?您不应该捕获异常并抛出新的异常,您在此处丢失了大量信息。这是Base-64字符数组的异常无效长度。感谢您的回复,我只想用任何基本密码加密和解密我的密码,不管密码的长度algorithms@mahesh:您通常不应该首先以可解密的形式存储密码-您几乎应该始终使用某种描述的哈希。Jon所说的,但也包括:编码!=加密。两者都是信息从一种形式到另一种形式的转换,但加密试图使信息无法读取,除非您拥有密钥。编码通常是做相反的事情:为了方便交流。谢谢你的回复,我只想用任何基本密码加密和解密我的密码,不管密码的长度algorithms@mahesh:您通常不应该首先以可解密的形式存储密码-您几乎应该始终使用某种描述的哈希。Jon所说的,但也包括:编码!=加密。两者都是信息从一种形式到另一种形式的转换,但加密试图使信息无法读取,除非您拥有密钥。编码通常是为了做相反的事情:为了方便交流。