c# – Java BigInteger到.NET中的字节数组

我正在与使用Java的BigInteger的合作伙伴进行集成,以生成字节数组作为简单加密算法的关键.我试图找到相当的.NET代码没有太多运气.

他们使用的Java代码是:

String keyString = "48B734DA47388C656913C9BF5146E186";
byte key[] = new BigInteger(keyString, 16).toByteArray();

产生以下字节数组:

[72, -73, 52, -38, 71, 56, -116, 101, 105, 19, -55, -65, 81, 70, -31, -122]

仅此一点令人不安,因为.NET中的字节范围为0-255,因此负值超出范围.

我提出的最接近的.NET代码是:

string keyString = "48B734DA47388C656913C9BF5146E186";
byte[] key = BigInteger.Parse(keyString, NumberStyles.HexNumber).ToByteArray();

产生以下字节数组:

[134, 225, 70, 81, 191, 201, 19, 105, 101, 140, 56, 71, 218, 52, 183, 72]

在这一点上,我认为.NET等价物是不可能的 – 特别是因为负字节值.

我期待着每个人的想法.

最佳答案
使用LINQ方法,评论中提供的I4V可以轻松解决.

  sbyte[] key = BigInteger.Parse(keyString, NumberStyles.HexNumber).ToByteArray().Reverse().Select(x => (sbyte)x).ToArray();

这将为您提供所需的阵列. .NET默认使用无符号字节,而Java默认使用带符号字节.它们具有相同的位表示,因此,取决于您正在使用它,实际上可能并不重要,但是,如果您想在.NET中使用真正等效的输出,则需要使用sbytes代替字节,简单地使用字节意味着两种语言之间的不同.

转载注明原文:c# – Java BigInteger到.NET中的字节数组 - 代码日志