从byte []转换为BigInteger

时间:2016-03-01 21:23:10

标签: c# bytearray biginteger dsa

我需要在C#中实现DSA而不使用任何库(除了密钥生成)作为我作业的一部分。 我设法生成公钥和私钥,但是当我尝试获取G或Y等参数并将它们转换为BigInteger时,我有时会得到负参数。参数本身在字节数组中是正数!当我将它们转换为BigInteger时,它们会变成负面的。这是我尝试的方式:

DSAParameters keys;          
DSACryptoServiceProvider DSAalg = new DSACryptoServiceProvider();
keys = DSAalg.ExportParameters(true);
BigInteger G = new BigInteger(keys.G);
Console.WriteLine("G is {0} \n", G);

我有什么想法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

根据Microsoft DocumentationBigInteger构造函数期望数组采用小端顺序(如果期望结果BigInteger具有特定值,请记住这一点)。

BigInteger构造函数的备注指出,如果您在BigInteger字节末尾添加byte[]字节,则可以确保从00创建的任何DSAParameters keys; var DSAalg = new DSACryptoServiceProvider(); keys = DSAalg.ExportParameters(true); byte[] bytes = keys.G; if ((bytes[bytes.Length - 1] & 0x80) > 0) { var temp = new byte[bytes.Length]; Array.Copy(bytes, temp, bytes.Length); bytes = new byte[temp.Length + 1]; Array.Copy(temp, bytes, temp.Length); } Console.WriteLine("G is {0} \n", new BigInteger(bytes)); 都是无符号的。调用构造函数之前的数组。在你的情况下,这将是:

ChromeDriver