如何将32个十六进制数存储在16字节数组中?

18 浏览
0 Comments

如何将32个十六进制数存储在16字节数组中?

我正在使用Triple DES算法进行加密。在进行加密时,我需要传入一个十六进制(32个字符)的密钥。当我将其转换为字节数组时,它会被存储为32个字节。但是算法的输入密钥应该只有16个字节。所以我的问题是如何将32个十六进制数字存储在16个字节的数组中?

0
0 Comments

这个问题的出现是因为用户想要将一个包含32个十六进制数字的字符串存储在一个长度为16字节的数组中。用户想要将字符串中的每个2个字符的块视为一个十六进制数,并将其转换为一个长度为原始字符串长度一半的字节数组。

为了解决这个问题,可以使用下面的扩展方法:

public static byte[] HexToByteArray(this string hex)
{
    hex = hex.Replace(" ", "").Replace("-", "");
    var numberChars = hex.Length;
    var bytes = new byte[numberChars / 2];
    for (var i = 0; i < numberChars; i += 2)
        bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
    return bytes;
}

这个方法首先将字符串中的空格和连字符删除。然后,它计算字符串的字符数,并创建一个长度为字符数一半的字节数组。接下来,它使用一个循环将每个2个字符的块转换为一个字节,并将其存储在字节数组中。最后,它返回字节数组作为结果。

使用这个方法,用户可以将一个包含32个十六进制数字的字符串转换为一个长度为16字节的字节数组。这个方法将字符串中的每个2个字符的块视为一个十六进制数,并将其转换为一个字节。最终的字节数组的长度将是原始字符串长度的一半。

0