0

我该如何解决这个错误,我cardnumber只尝试过加密,当我已经添加了 .xml 文件时,我在创建 xml 文件时没有问题expdate。它提示错误,

到目前为止,这是我的代码:

    cardnumber = cs_aes.Encrypt(cardnumber);
expdate = cs_aes.Encrypt(expdate);

XElement xml_request = new XElement("Request",
                new XElement("Transaction",
                    new XElement("CardNumber", cardnumber),
                    new XElement("CardMember", cardmember),
                    new XElement("ExpDate", expdate),
                    new XElement("Amount", amount),
                    new XElement("Invoice", invoice),
                    new XElement("Zip", zip),
                    new XElement("Street", street),
                    new XElement("Security", security),
                    ));

                    xml_request.Save(path here);

加密/解密代码

4

2 回答 2

5

您的 GetString() 方法已损坏。您不能将 byte[] 存储在这样的字符串中。字符串中的字节值不是任意的,它们必须遵守规范化的 utf-16 编码字符串的规则。您可能很幸运,因为它很早就因一个不好的代理值而窒息,标准化也有随机破坏您的数据的习惯,而您不会轻易发现它。

您可以使用 Convert.ToBase64String() 将 byte[] 转换为字符串。

于 2013-04-03T00:49:13.583 回答
2

正如预期的那样,您的代码通过本质上将字节数组转换为字符数组而不是字符串来将字节序列转换为字符串。

这是个坏主意,因为字节数组可能包含在许多期望有效字符串的上下文中无效/不可接受的序列:

  • 0 个字符(两个 0 字节)可能会导致许多 API 将字符串视为在该字符处终止
  • 0-31 个字符在 XML 中不可打印/不允许
  • 尝试在屏幕上打印/显示时,无效的代理对将无法正确呈现,在 XML 中也不允许
  • 许多字符与可见表示无关。

处理字节数组/二进制数据的正确方法是按原样存储(如果存储格式允许)或编码(即对于 XML,建议使用 base64 编码)。

于 2013-04-03T00:45:31.847 回答