尝试使用AES将输入字符串解码为Decrypt

时间:2015-08-28 18:51:55

标签: c# encryption aes

我正在与向我们提供AES加密消息示例的供应商合作,我们有一个共享密钥,而我只是测试加密/解密。

他们提供的解密消息如下所示。通常我会期待一个字符串,但这是他们提供的:

d4 ee 84 87 f4 e2 0d c2 ef 07 e4 2c 9f b2 48 9e
  1. 我有点困惑,那是什么样的表示法?

  2. 我的加密/解压方法是使用字符串作为输入,字符串作为输出,但在内部我使用字节数组:

    byte[] plainBytes = Encoding.Unicode.GetBytes(plainText);
    
  3. 如何将上述输入转换为字节数组?

2 个答案:

答案 0 :(得分:3)

它是字节的十六进制represantation

string bytes = "d4 ee 84 87 f4 e2 0d c2 ef 07 e4 2c 9f b2 48 9e";
var buf = bytes.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();

如果您的十六进制字符串不包含任何空格

string bytes = "d4ee8487f4e20dc2ef07e42c9fb2489e";
var buf = Regex.Matches(bytes, ".{2}").Cast<Match>()
               .Select(x => Convert.ToByte(x.Value, 16)).ToArray();

你甚至可以使用System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary类来解析带或不带空格的十六进制字符串。

string bytes = "d4ee8487f4e20dc2ef07e42c9fb2489e";
var buf = SoapHexBinary.Parse(bytes).Value;

<强>顺便说一句:

您应该注意,如果您使用它,则Encoding.Unicode.GetString无法将每个字节数组安全地转换为字符串。

var buf = new byte[] { 0xff, 0xff, 0xff };
string str = Encoding.Unicode.GetString(buf);
var buf2 = Encoding.Unicode.GetBytes(str);

buf2不等于buf。要将字节数组转换为字符串,请使用Convert.ToBase64StringBitConverter.ToString

答案 1 :(得分:1)

此代码运行后,theBytes将包含您的字节数组:

byte[] theBytes = new byte[15];
string hexstring = "d4ee8487f4e20dc2ef07e42c9fb2489e";

for (int i = 0; i < 15; i++)
{
 string thisByte = hexstring.Substring(i * 2, 2);
 int intValue = Convert.ToInt16(thisByte, 16);
 theBytes[i] = BitConverter.GetBytes(intValue)[0];
}