Мне нужно реализовать DSA без каких-либо libaries (кроме генерации ключей) в C# в качестве части моей домашней работы. Мне удалось создать открытый и закрытый ключ, но когда я пытаюсь получить такие параметры, как G или Y, и преобразовать их в BigInteger, я иногда получаю отрицательные параметры. Сами параметры положительны в массиве байтов! Они превращаются в негативные, когда я конвертирую их в BigInteger. Вот как я это делаю:DSAParameters отрицательны при преобразовании из байта [] в BigInteger
DSAParameters keys;
DSACryptoServiceProvider DSAalg = new DSACryptoServiceProvider();
keys = DSAalg.ExportParameters(true);
BigInteger G = new BigInteger(keys.G);
Console.WriteLine("G is {0} \n", G);
Любые идеи, как я мог это решить?
Значительные байты выше 127 считаются отрицательными, если только предшествует байт 00. Это может сделать некоторые из ваших результатов отрицательными. См. Документы в «ToByteArray». –