【问题标题】:string is not displayed when converting binary to string将二进制转换为字符串时不显示字符串
【发布时间】:2013-04-29 19:24:17
【问题描述】:

我有一些问题,我无法定义原因。

我有解密一些信息的功能,返回值是一个从二进制转换为字符串的字符串。

public static string Decrypt(string encryptedText, string completeEncodedKey, int keySize)
    {

        RijndaelManaged aesEncryption = new RijndaelManaged();
        aesEncryption.KeySize = keySize;
        aesEncryption.BlockSize = 128;
        aesEncryption.Mode = CipherMode.CBC;
        aesEncryption.Padding = PaddingMode.Zeros;
        aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]);
        aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]);
        ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
        byte[] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0, encryptedText.Length);// convert the cipertext to binary
        string RESULT = (string)ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length));//convert the binary to string

        return RESULT;
     }

当我调用此函数并获取结果时出现问题,然后尝试使用其他字符串显示结果,例如通过此消息框:

 String result= function.Decrypt(textToBeDecrypted, key, 128);


MessageBox.Show("This is sample text " + result + " here i want to append another string ");

仅附加文本(在此示例中:“这里我想附加另一个字符串”)不显示

这是怎么回事?

【问题讨论】:

  • 使用调试器。单步执行Decrypt。沿途检查值。找到问题。
  • result 值显示得很好,并按我的预期返回。但是当我附加另一个文本时,不会显示这个新文本。
  • 所以你的意思是here i want to append another string没有显示?
  • 正是我的意思

标签: c# string binary ascii


【解决方案1】:

试试这个:

string result = function.Decrypt(textToBeDecrypted, key, 128).Replace("\0", string.Empty);

【讨论】:

  • 和@Jonesy 感谢您强调问题! :) 非常感谢
  • @hum。我看到您以前从未投票/接受过 - 请不要忘记投票/接受您认为最能解决您的问题的任何答案。很高兴为您提供帮助。
  • 甜我不确定一个简单的替换是否可行。很高兴它做到了。
【解决方案2】:

http://bytes.com/topic/c-sharp/answers/275256-rijndael-decrypt-returning-escape-characters-end-string

似乎是同一个问题。我敢打赌你最后有一个转义字符(\0)。

【讨论】:

  • 有道理,我会探索返回字符串的字符
【解决方案3】:
aesEncryption.Padding = PaddingMode.Zeros;

您在消息的末尾添加了零...就 Win32 MessageBox API 而言,零结束了字符串。

在解密过程中移除填充(使用不同的填充模式更容易)。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多