Преобразование байтового массива с прямым порядком байтов BigInteger с использованием .netstandard 2.0 - PullRequest
1 голос
/ 27 января 2020

У меня есть код, который работает с .netstandard2.1 / netcore3.0 из-за этого конструктора класса BigInteger. Этот ctor недоступен для netstandard2.0, и я хотел бы получить такую ​​же функциональность, не применяя netstandard2.1.

Вот проблема:

  • Конвертировать строка в UTF8 и ha sh это с использованием Sha256
  • Преобразование массива байтов в BigInteger с использованием байтового порядка с прямым порядком байтов

Вот мое решение, которое работает с .netstandard2.1

    static SHA256 sha256 = SHA256.Create();
    internal static string GetEncoded(string value)
    {
        var data = sha256.ComputeHash(value.GetUTF8Bytes());

        return new BigInteger(
            value: data,
            isUnsigned: true,
            isBigEndian: true).ToString();
    }

Это решение может быть в netstandard2.0, к сожалению, оно не дает того же результата.

    internal static string GetEncoded(string value)
    {
        var data = sha256.ComputeHash(value.GetUTF8Bytes());

        return new BigInteger(value: data).ToString();
    }

Вот некоторые примеры значений и их ожидаемые закодированные выходы.

"encoded": "68086943237164982734333428280784300550565381723532936263016368251445461241953",
"raw": "101 Wilson Lane"

"encoded": "101327353979588246869873249766058188995681113722618593621043638294296500696424",
"raw": "SLC"

Из того, что я понимаю, BigInteger(byte[]) ctor ожидает байтовый массив с прямым порядком байтов. Несколько решений, которые я попробовал, не дали ожидаемых результатов, поэтому я обращаюсь к SO за ответами. Любая помощь будет принята с благодарностью.

Проблема с обновлением до net core

1 Ответ

1 голос
/ 27 января 2020

Вот код используемого вами конструктора: https://github.com/dotnet/corefx/blob/191ad0b5d52172366436322bf9d553dc770d23b1/src/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs#L256

Вы можете адаптировать его, чтобы заменить ReadOnlySpan байтом [].

...