C# 如何在ASP.NET中对密码字段进行编码
我有下面的代码来编码密码字段,但当密码字段超过10个字符时,它会出错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
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所说的,但也包括:编码!=加密。两者都是信息从一种形式到另一种形式的转换,但加密试图使信息无法读取,除非您拥有密钥。编码通常是为了做相反的事情:为了方便交流。