我有以下代码来编码密码字段,但是当密码字段超过十个字符时会出错。
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;
}
答案 0 :(得分:3)
该代码本身不应该失败 - 但它实际上并没有为密码提供任何保护。我不确定你真正尝试做什么样的“编码”,但这不是不是的方法。的问题:
Exception
,这几乎总是一个坏主意如果你能向我们解释一下大局是什么,我们或许可以建议一个更好的方法。
我的猜测是,当你调用Convert.FromBase64String
时,你所看到的异常实际,即等效的解码方法告诉我们。
答案 1 :(得分:1)
我认为您需要修改代码。
这些是2个链接,提供了更多细节 -
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx
答案 2 :(得分:0)
他们对此不正确是正确的。但你问的问题是为什么代码失败了。 Base64字符串通常比它们编码的字符串占用更多空间。您试图以较少的字符(64而不是255)存储相同数量的数据,因此它会扩展字符串。由于您根据字符串的大小确定数组的大小,因此只要base 64字符串超过基本255字符串的大小,就会出现错误。不要自己编写代码,而是使用内置转换器。
System.Convert.ToBase64String()
System.Convert.FromBase64String()
但正如我之前提到的,这不安全,所以只有在尝试使用遗留系统做某事时才使用它,并且由于某种原因需要保留功能。