我已阅读here:
如果您已经看过正在生成的安全证书 计算机......,这正是发生的事情 - 它产生了两个 大数字,检查它们是否是最重要的 将它们相乘。这为您提供了“公钥” 可以与世界自由分享。它允许其他人发送给你 通过使用您的公钥加密消息; 然而,从那以后 从公钥中获取原始的两个素数很难 (只有你的计算机知道它们,因为它在第一个生成它们 你是唯一一个可以解密它们的人!
所以我想测试从两个大素数的乘法中“提取”素数需要多少:
我不会占用庞大的数字(只是为了演示)所以我去了to this site并取了两个大的(不是很大的)素数:
32452867
和
15485867
让我们相乘,我们有:502560782130689
现在让我们看看这个数字是由哪个素数组成的:
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秒才发现:
问题
我很肯定我不理解上面的段落,因为对我来说,找出数字的主要数字似乎很容易:所以我不理解这一部分:
然而,从那以后 从公钥中获取原始的两个素数很难(???)
**更新:**
我想进一步选择更多数字:
941,083,987和295,075,153(乘法= 277690501449875011)
而且时间足够短:
答案 0 :(得分:1)
正如我的评论中所述,RSA密钥的大小通常更大。你的例子可以很容易被强行(!)。用于SSH和类似的RSA密钥通常是2048或甚至4096位长(大约616或1233十进制数字)。在这一点上,尝试暴力破解它们基本上是永远的,即使是已知的最佳算法也不会显着缩短它们的破解时间。
如果有一种算法可以有效地解决这个问题仍然是一个悬而未决的问题。
编辑:您首先询问了为何使用素数:如果您不选择素数,算法将不再有效。我建议你阅读一本关于离散数学的书(或者可能只是维基百科的文章),了解RSA的工作原理。