Описание тега mission-control
Мне пришлось переустановить х первых... Кроме того, `параметр` + `сдвиг` + `зеленое окно кнопку на экран заполнить. Старый ярлык: `сдвиг` + `зеленая кнопка стеклоподъемника` Здорово :) тогда мы сможем закрыть эту тему, как это сделано ! Это актуальная проблема? Это звучит, как вы делаете один пример ради этот вопрос, но я не верю, что многие мусульмане сочли бы это за правило следовать в современный День. Нет необходимости обсуждать гипотетические вопросы. Если вы имели реальной ситуации, вы должны использовать это как пример. Вы считаете после этого, а затем спрашивают, как профессор рекомендует регулировать этот тип ошибки (и, возможно, других типов ошибок) в будущем? Вопросы известны, но в результате экологических переменных не являются. Это также, как ожидают, скрипт не знает, когда перестать ждать больше информации.
Да, вы можете преобразовать 33 байт сжатый публичный ключ в 65-байт несжатых открытого ключа в Java.
Вот код для выполнения операции. Это правильные, надежные, и требует только классы Java ЮВ (никаких других библиотек) - но я прошу прощения за длину реализации.
импорт Java.математика.Типа BigInteger;
импорт Java.утиль.Массивов;
статический окончательный модуль типа BigInteger =
нового типа BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16);
статические заключительные типа BigInteger CURVE_A = нового типа BigInteger("0");
статические заключительные типа BigInteger CURVE_B = нового типа BigInteger("7");
// Дан 33 байт сжатый публичный ключ, который возвращает 65-байтным ключом без сжатия.
байт[] decompressPubkey(байт[] compKey) {
// Проверка массива длина и тип индикатора байт
если (compKey.длина != 33 || compKey[0] != 2 && compKey[0] != 3)
бросить новый IllegalArgumentException();
последний байт[] xCoordBytes = массивов.copyOfRange(compKey, 1, compKey.длина);
окончательные типа BigInteger xCoord = нового типа BigInteger(1, xCoordBytes); // диапазон [0, 2^256)
Типа BigInteger ТЭМП = xCoord.пр(2).добавить(CURVE_A);
ТЭМП = sqrtMod(темп.добавить(CURVE_B));
логическое tempIsOdd = ТЭМП.testBit(0);
логическое yShouldBeOdd = compKey[0] == 3;
если (tempIsOdd != yShouldBeOdd)
темп = темп.отрицание().Mod(модуль);
окончательные типа BigInteger yCoord = темп;
// Скопировать координату X в новый
ключ // несжатого, и изменить тип Byte
байт[] результат = массивов.копия(compKey, 65);
результат[0] = 4;
// Тщательно скопировать координату Y в ключ несжатого
последний байт[] yCoordBytes = yCoord.toByteArray();
для (int я = 0; Я < 32 && я < yCoordBytes.длина; я++)
результат[результат.длина - 1 - я] = yCoordBytes[yCoordBytes.длина - 1 - я];
возврат результат;
}
// Заданных X, который возвращает значение y такое, что y^2 % модуль == х.
Типа BigInteger sqrtMod(значение BigInteger) {
утверждаю (модуль.сертификата от его закодированной формы() & 3) == 3;
Типа BigInteger тыц = модуль.добавить(типа BigInteger.Один).shiftRight(2);
Результат BigInteger = значение.modPow(пр, модуль);
утверждать результат.пр(2).Mod(модуль).равна(значение);
возврат результат;
}
Мой биткоин криптография библиотека реализует по модулю-премьер-области арифметики, но он должен добавить функциональность для распаковки открытых ключей, а также...