Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 素数作为公钥-澄清?_Security_Certificate_Primes_Prime Factoring - Fatal编程技术网

Security 素数作为公钥-澄清?

Security 素数作为公钥-澄清?,security,certificate,primes,prime-factoring,Security,Certificate,Primes,Prime Factoring,我读过: 如果您观看了在您的计算机上生成的安全证书 计算机…,这就是发生的事情——它产生两个 大数,检查它们是否都是素数和 将它们相乘。这将为您提供“公钥”,您可以 可以与世界自由分享。它允许其他人发送给你 通过使用公钥加密消息但是,自从 从公钥中获取原始的两个素数很难 (只有您的计算机知道它们,因为它是在第一个 你是唯一一个真正能够解密它们的人 所以我想测试从两个大素数的乘法中“提取”素数需要多少时间: 我不会用巨大的数字(只是为了演示),所以我用了两个大的(不是巨大的)素数: 3245286

我读过:

如果您观看了在您的计算机上生成的安全证书 计算机…,这就是发生的事情——它产生两个 大数,检查它们是否都是素数和 将它们相乘。这将为您提供“公钥”,您可以 可以与世界自由分享。它允许其他人发送给你 通过使用公钥加密消息但是,自从 从公钥中获取原始的两个素数很难 (只有您的计算机知道它们,因为它是在第一个 你是唯一一个真正能够解密它们的人

所以我想测试从两个大素数的乘法中“提取”素数需要多少时间:

我不会用巨大的数字(只是为了演示),所以我用了两个大的(不是巨大的)素数:

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秒钟才发现:

问题

我肯定我不理解上面的段落,因为,对我来说,找出素数是由什么组成的似乎很容易:所以我不理解这部分:

但是, 从公钥中获取原始的两个素数很难(???)

**更新:**

我想更进一步,选择更多的数字:

941083987和295075153(乘法=277690501449875011)

而且时间也很短:


正如我在评论中所指出的,RSA密钥的大小通常要大得多。您的示例可以很容易地进行暴力强制(!)。用于SSH和类似应用程序的RSA密钥通常为2048位,甚至4096位(约616位,分别为1233位十进制数字)。在这一点上,试图对它们进行暴力攻击基本上需要永远的时间,即使是已知的最好的算法也不会显著缩短破解它们的时间

是否有一种算法能够有效地实现这一点仍然是一个悬而未决的问题


编辑:你首先问为什么使用素数:如果你不选择素数,算法将不再有效。我建议读一本关于离散数学的书(或者仅仅是wikipedia的文章),了解RSA如何工作的详细信息。

这些数字并不多。通常,RSA密钥的大小为2048位,甚至更大。这相当于大约600或更多的十进制数字。@CBenni感谢您的回复。你知道我在哪里可以找到和玩这些(比如)数字(可能是链接?)我不知道是否有一个网站有这样的素数,格式为数字,通常它们存储为签名文件。linux命令ssh-keygen-t rsa可以用来随机生成这样的密钥。感谢您的澄清。