Как RSA Modulus & amp; Экспонент работает в C #, если оба находятся в десятичном формате

Если ваш URL-адрес имеет точки в доменном имени, IE будет обрабатывать его так, как будто это интернет-адрес, а не локальный. У вас есть как минимум два варианта:

  1. Получите псевдоним, который будет использоваться в URL-адресе для замены server.domain. Например, myapp.
  2. Выполните следующие действия на вашем компьютере.

Перейдите на сайт и отмените диалог входа в систему. Пусть это произойдет:

В настройках IE:

0
задан chirag1707 13 July 2018 в 09:55
поделиться

1 ответ

Вы можете попробовать:

public static class BigIntegerExtensions
{
    public static byte[] ToByteArrayBigEndianUnsigned(this BigInteger bi, int minSize = 0)
    {
        byte[] bytes = bi.ToByteArray();

        int length;

        if (bytes[bytes.Length - 1] != 0)
        {
            if (minSize == 0 || minSize <= bytes.Length)
            {
                Array.Reverse(bytes);
                return bytes;
            }

            length = bytes.Length;
        }
        else
        {
            length = bytes.Length - 1;
        }

        var bytes2 = new byte[minSize == 0 ? length : Math.Max(minSize, length)];

        for (int i = 0, j = bytes2.Length - 1; i < length && j >= 0; i++, j--)
        {
            bytes2[j] = bytes[i];
        }

        return bytes2;
    }
}

var bi1 = BigInteger.Parse("18597082174523508716390621410767314599038866539779750637065684697259605002694360104971398651747704217448206242771805831180528356170981586469477958663193117845356353634469679095227815268434823260637917891539622982485837392495877800705071553435850492058570460745900129552907596604479063007676795998193064078987369363544131073880694736862904482385332020513837955197528182597410203652025183467149166026077910473816908590029574674997850683021938033561647681780168764842253700974777073181357779101690539999736174329578178742236883520017849893817175274405622018571899733008344137833140207194792223664500885734080606246950229");
var bi2 = BigInteger.Parse("65537");
var bytes1 = bi1.ToByteArrayBigEndianUnsigned();
var bytes2 = bi2.ToByteArrayBigEndianUnsigned();

var pars = new RSAParameters();
pars.Modulus = bytes1;
pars.Exponent = bytes2;

Есть два отличия в том, как BigInteger.ToByteArray() экспортирует в byte[] и как RsaParameters ожидает его параметров: BigInteger подписан и немного endian, поэтому некоторые Modulus имеют 0 добавленных, чтобы сделать их положительными (и для 1024 бит ключи имеют длину 129 байтов вместо 128), а самая значимая цифра - последняя, ​​RsaParameters ожидает, что ее параметры будут неподписанными (поэтому 1024 бит ключ должен быть длиной 128 байтов) и большой endian (поэтому самая значимая цифра является первой).

Обратите внимание, что импорт закрытого ключа из BigInteger еще сложнее: -)

Примечание 2: minSize в ToByteArrayBigEndianUnsigned() предназначен для импорта закрытых ключей с InvariantQ.Length < Exponent.Length / 2. Игнорируйте его.

0
ответ дан xanatos 17 August 2018 в 13:14
поделиться
  • 1
    BigInteger ToByteArray () - Маленький Endian. Значения RSAParameters - большие Endian. Вам нужно Array.Reverse, прежде чем возвращать его. (Вы не можете заметить для 65537, так как это палиндром в базе 256) – bartonjs 13 July 2018 в 16:38
  • 2
    @bartonjs А ... Да ... Вы правы! :-) Исправленный. – xanatos 14 July 2018 в 07:45
  • 3
    @xanatos Большое спасибо ... Он работал как ожидалось !!! – chirag1707 18 July 2018 в 11:34
  • 4
    @bartonjs Спасибо большое ... – chirag1707 18 July 2018 в 11:35
Другие вопросы по тегам:

Похожие вопросы: