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

时间:2014-11-12 17:04:05

标签: c# arrays

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

现在要清楚我已经使用了MSDN上提供的RSA加密和解密样本数据,一切正常,所以我对加密部分很好有信心。此外,MSDN提供的样本提供已经转换为byte []的素数。因此,我高度确信故障是在 MY 将数字的字符串表示转换为字节[]。

我目前这样做:

private static string _publicKeyExponent = "12345...310 digits......9876";
private static string _publicKeyModulus = "654782....620 digits.....4576";

_rsaPublicKey.Exponent = CoreHelpers.GetBytes(_publicKeyExponent);

这是我的GetBytes方法,我怀疑它是导致问题,因为它获取STRING字符的字节不是数字。

    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然后获取它的字节。将它添加到某个主字节数组并再次执行。

1 个答案:

答案 0 :(得分:2)

您可以使用BigInteger结构 它包含许多Parse静态方法和ToByteArray方法 示例代码:

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