我正在与一个使用Java的合作伙伴进行集成,他使用Java的BigInteger
生成一个字节数组作为简单加密算法的密钥。我尝试找到等效的.NET代码,但没有什么好的结果。
他们使用的Java代码是:
String keyString = "48B734DA47388C656913C9BF5146E186";
byte key[] = new BigInteger(keyString, 16).toByteArray();
这将产生以下byte
数组:
[72, -73, 52, -38, 71, 56, -116, 101, 105, 19, -55, -65, 81, 70, -31, -122]
这一点很令人不安,因为 .NET 中的 byte
范围是从 0 到 255,所以负值超出了范围。
我想到的最接近的 .NET 代码如下:
string keyString = "48B734DA47388C656913C9BF5146E186";
byte[] key = BigInteger.Parse(keyString, NumberStyles.HexNumber).ToByteArray();
这将产生以下byte
数组:
[134, 225, 70, 81, 191, 201, 19, 105, 101, 140, 56, 71, 218, 52, 183, 72]
目前,我认为一个.NET的等效方案似乎不可能实现 - 特别是因为负的byte
值。
期待大家的想法。
ToByteArray()
后面添加.Cast<sbyte>().ToArray();
。应该可以解决问题。 - It'sNotALie.System.SByte[]
。 - Federico Berasateguibyte
数组,它们是有符号值。第二个是.Net的byte
数组,它们不是有符号值。 - NominSimvar s = String.Join(",", key.Reverse().Select(x => (sbyte)x).ToArray());
- I4Vbyte
而使用sbyte
的理由? - Mike Precup