Security 素数作为公钥-澄清?
我读过: 如果您观看了在您的计算机上生成的安全证书 计算机…,这就是发生的事情——它产生两个 大数,检查它们是否都是素数和 将它们相乘。这将为您提供“公钥”,您可以 可以与世界自由分享。它允许其他人发送给你 通过使用公钥加密消息但是,自从 从公钥中获取原始的两个素数很难 (只有您的计算机知道它们,因为它是在第一个 你是唯一一个真正能够解密它们的人 所以我想测试从两个大素数的乘法中“提取”素数需要多少时间: 我不会用巨大的数字(只是为了演示),所以我用了两个大的(不是巨大的)素数: 32452867 及 15485867 让我们将它们相乘,得到:502560782130689 现在让我们看看这个数是由什么素数组成的:Security 素数作为公钥-澄清?,security,certificate,primes,prime-factoring,Security,Certificate,Primes,Prime Factoring,我读过: 如果您观看了在您的计算机上生成的安全证书 计算机…,这就是发生的事情——它产生两个 大数,检查它们是否都是素数和 将它们相乘。这将为您提供“公钥”,您可以 可以与世界自由分享。它允许其他人发送给你 通过使用公钥加密消息但是,自从 从公钥中获取原始的两个素数很难 (只有您的计算机知道它们,因为它是在第一个 你是唯一一个真正能够解密它们的人 所以我想测试从两个大素数的乘法中“提取”素数需要多少时间: 我不会用巨大的数字(只是为了演示),所以我用了两个大的(不是巨大的)素数: 3245286
void Main()
{
double a, b;
Console.WriteLine("Please enter your integer: ");
a = double.Parse(Console.ReadLine());
for (b = 2; a > 1; b++)
if (a % b == 0)
{
int x = 0;
while (a % b == 0)
{
a /= b;
x++;
}
Console.WriteLine("{0} is a prime factor {1} times!", b, x);
}
}
花了2秒钟才发现:
问题
我肯定我不理解上面的段落,因为,对我来说,找出素数是由什么组成的似乎很容易:所以我不理解这部分:
但是,
从公钥中获取原始的两个素数很难(???)
**更新:**
我想更进一步,选择更多的数字:
941083987和295075153(乘法=277690501449875011)
而且时间也很短:
正如我在评论中所指出的,RSA密钥的大小通常要大得多。您的示例可以很容易地进行暴力强制(!)。用于SSH和类似应用程序的RSA密钥通常为2048位,甚至4096位(约616位,分别为1233位十进制数字)。在这一点上,试图对它们进行暴力攻击基本上需要永远的时间,即使是已知的最好的算法也不会显著缩短破解它们的时间 是否有一种算法能够有效地实现这一点仍然是一个悬而未决的问题
编辑:你首先问为什么使用素数:如果你不选择素数,算法将不再有效。我建议读一本关于离散数学的书(或者仅仅是wikipedia的文章),了解RSA如何工作的详细信息。这些数字并不多。通常,RSA密钥的大小为2048位,甚至更大。这相当于大约600或更多的十进制数字。@CBenni感谢您的回复。你知道我在哪里可以找到和玩这些(比如)数字(可能是链接?)我不知道是否有一个网站有这样的素数,格式为数字,通常它们存储为签名文件。linux命令ssh-keygen-t rsa可以用来随机生成这样的密钥。感谢您的澄清。