从表示为字符串的非常大的整数中获取 Byte 数组

本文关键字:获取 Byte 数组 整数 非常 表示 字符串 | 更新日期: 2023-09-27 18:30:17

我有一个非常大的素数(用于RSA目的),需要转换为字节数组。但是,该数字当前存储为字符串。我可以将其存储为 byte[],但无论哪种方式,数字都是字符串,我必须将其放入字节数组中。

现在要明确的是,我已经使用了MSDN上提供的RSA加密和解密示例数据,并且一切正常,因此我对加密部分没有问题有很高的信心。此外,MSDN 提供的示例提供了已转换为 byte[] 的质数。因此,我非常有信心细分是在我将数字的字符串表示转换为字节[]。

我目前这样做:

private static string _publicKeyExponent = "12345...310 digits......9876";
private static string _publicKeyModulus = "654782....620 digits.....4576";
_rsaPublicKey.Exponent = CoreHelpers.GetBytes(_publicKeyExponent);

这是我的 GetBytes 方法,我怀疑它导致了这个问题,因为它正在获取字符串字符的字节而不是数字。

    public static byte[] GetBytes(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }

现在,如果我已经确定问题修复应该很简单,不是吗?对我来说是和不是。我不知道 c# 中有任何强类型可以将这种大小的数字解析成。我能想到的最好的主意是将字符串分解成更小的块,比如 10 个字符,然后很容易解析为 INT32,然后获取其中的字节数。将其添加到某个主字节数组中,然后再次执行。

从表示为字符串的非常大的整数中获取 Byte 数组

您可以使用

BigInteger结构。
它包含许多Parse静态方法和ToByteArray方法。
示例代码:

public static byte[] GetBytes(string str)
{
    BigInteger number;
    return BigInteger.TryParse(str, out number) ? number.ToByteArray() : null;
}