0

データベースでアドレスを暗号化したいのですが、例外なく保存されますが、ロード時にアドレスを復号化するとエラーが発生します:

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);
  }
}
4

1 に答える 1

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は "MTIzIEFueSBTdHJlZXQsIEFueSBDaXR5LCBBbnkgU3RhdGUgOTk5OTksIFVTQQ==" になります。これをデータベースに保存するとします。

デコード側:

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

住所は「123 Any Street, Any City, Any State 99999, USA」になります。

sDataは、適切に終了された有効な Base64 でエンコードされた文字列である必要があります。そうでない場合、Convert.FromBase64String は例外を生成します。

暗号化コードを持っていない場合、上記のセキュリティはゼロであることを忘れないでください。

于 2012-05-11T09:00:51.980 に答える