解密个人地址会给出错误的asp.net

时间:2012-05-11 08:14:02

标签: asp.net encryption

我想加密数据库中的地址,它保存没有异常,但是当我在加载时解密地址时它会出错:

Unable to load information. Possible reason: Error in DecodeInvalid length for a Base-64 char array. 

<asp:TextBox ID="txtAddress" runat="server" Width="200px" />
<ajaxToolkit:FilteredTextBoxExtender ID="ftxtAddress" runat="server" TargetControlID="txtAddress"
FilterType="Custom,Numbers, LowercaseLetters" InvalidChars="!@#$%^&*()~`*-/+|\}{[]<>?" ValidChars=",.?-_ " />

我用:

public string Decode(string sData)
{
  try
  {
    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;
  }
  catch (Exception e)
  {
    throw new Exception("Error in Decode" + e.Message);
  }
}

1 个答案:

答案 0 :(得分:1)

在编码方面:

string rawText = "123 Any Street, Any City, Any State 99999, USA";
byte[] bytesE =  UTF8Encoding.UTF8.GetBytes(rawText);
//If you have your encryption code and it outputs a byte array, pass that to bytesE
string sData = Convert.ToBase64String(bytesE);

sData 将是&#34; MTIzIEFueSBTdHJlZXQsIEFUESBDaXR5LCBBbnkgU3RhdGUgOTk5OTksIFVTQQ ==&#34;。我假设你将它存储在你的数据库中。

在解码方面:

byte[] bytesD = Convert.FromBase64String(sData);
//If you have your decryption program, you now pass bytesD to it.
string address = UTF8Encoding.UTF8.GetString(bytesD);

地址现在将是&#34; 123 Any Street,Any City,Any State 99999,USA&#34;

sData 必须是正确终止的有效Base64编码字符串,否则Convert.FromBase64String将产生异常。

请注意,如果您没有加密代码,则以上提供安全性。