我有一个非常大的素数(用于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然后获取它的字节。将它添加到某个主字节数组并再次执行。
答案 0 :(得分:2)
您可以使用BigInteger
结构
它包含许多Parse
静态方法和ToByteArray
方法
示例代码:
public static byte[] GetBytes(string str)
{
BigInteger number;
return BigInteger.TryParse(str, out number) ? number.ToByteArray() : null;
}