当我深入到.Net源代码时,我找不到调用rsa.Encrypt时实际运行的代码,也许它是在DLL中运行的代码,因为我找不到方法被覆盖的地方
请您指向rsa函数的源代码,在此处加密或说明对字节数组进行加密(保持每个值0> 255)的作用
我尝试深入研究.net源代码
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/rsa.cs
我试图进入代码进行调试(它只是跳过而没有进入)
我试图了解RSA如何在将数字保持在整数环(即0> 255)内的同时对其进行加密
public byte[] Encrypt(string publicKeyXML, string dataToEncript)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKeyXML);
return rsa.Encrypt(ASCIIEncoding.ASCII.GetBytes(dataToEncript), true);
}
我希望.net源代码可用于覆盖函数的源代码
答案 0 :(得分:0)
documentation for RSACryptoServiceProvider
明确列出了PKCS#1 v2中指定的带有OAEP填充的RSA,最新版本为PKCS#1 v2.2(链接到此更高版本中的OAEP规范)。但是,它没有指定用于MGF1的哈希函数,但是您可以确定它是默认的SHA-1函数(在这种情况下,这不是直接的安全问题)。因此,我不完全确定,如果标准明确定义了算法,为什么您会尝试读取源代码。
答案 1 :(得分:0)
RSACryptoServiceProvider.Encrypt
只是调用Windows CryptEncrypt
,所以无论如何您都找不到答案。
您似乎给人一种印象,它在RSA操作期间对字节进行操作,但实际上,它对位或数字进行操作,这取决于您如何考虑。
32位整数值253加32位整数值5会产生32位值258,但是在字节级别{ FD, 00, 00, 00 }
+ { 05, 00, 00, 00 }
= { 02, 01, 00, 00 }
(小endian十六进制)。在数字级别或位级别上,该操作比字节级别更有意义...但是在字节级别上加法仍然很容易。
如果您真的想了解正在发生的事情,可以逐步进行BigInteger.ModPow
,它是RSA涉及的主要操作的托管实现。 BigInteger类型的目的是使用不受32位或64位空间限制的数字。