第一步,随机选择两个不相等的质数p和q。
爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。)
第二步,计算p和q的乘积n。
爱丽丝就把61和53相乘。
n = 61×53 = 3233
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。(实际应用中,RSA密钥一般是1024位,重要场合则为2048位。)
第三步,计算n的欧拉函数φ(n)。
根据公式:
φ(n) = (p-1)(q-1)
爱丽丝算出φ(n)等于60×52=3120。
第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
爱丽丝就在1到3120之间,随机选择了e=17。(实际应用中,常常选择65537。)
第五步,计算e对于φ(n)的模反元素d。
所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。
ed ≡ 1 (mod φ(n))
这个式子等价于
ed - 1 = kφ(n)
实质上就是对下面这个二元一次方程求解。
ed + φ(n)k = 1
已知 e=17, φ(n)=3120,
17d + 3120k = 1
这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。
总之,爱丽丝算出一组整数解为 (d,k)=(2753,-15),即 d=2753。
至此所有计算完成。
第六步,将n和e封装成公钥,n和d封装成私钥。
在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。
第七步:发送公钥,保留私钥。此消息在centificate中。
爱丽丝将公钥(3233,17)发给Bob,自己保留私钥就是(3233, 2753)。
证书公钥见下面的抓包
相关推荐
公钥可以公开,任何人都可以使用公钥对数据进行加密,但只有知道私钥的人才能解密,因为解密过程涉及到大数因子分解,这在当前计算能力下是非常困难的。 在C# .NET中,我们可以使用System.Security.Cryptography...
这个压缩包中的“RSA公钥计算器”显然是一款用于理解和实践RSA算法的工具,特别适合学习者使用。 首先,我们要理解RSA的核心概念。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出的,所以得名RSA。它...
在Linux环境下,生成RSA公钥和PEM公钥文件通常涉及到加密和安全领域的知识,特别是公钥基础设施(Public Key Infrastructure, PKI)中的RSA算法。RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard ...
本文将详细讲解Delphi环境下如何实现RSA加解密,并着重讨论其支持的公钥加密私钥解密以及私钥加密公钥解密的功能,同时涉及PKCS8和PKCS1两种秘钥格式。 RSA是一种基于大数因子分解困难性的加密算法,由Ron Rivest、...
RSA公钥加密体制是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。该算法基于大数因子分解的数学难题,确保了其安全性。在这个程序中,开发者使用MFC...
2. **计算n**:将p和q相乘得到n=p*q,n是RSA公钥和私钥的一部分。 3. **计算φ(n)**:φ(n)是欧拉函数,对于两个互质的大素数p和q,φ(n)=(p-1)*(q-1),它是决定解密的关键值。 4. **选择e**:选择一个与φ(n)互质...
本文将详细讲解如何在Windows操作系统上利用OpenSSL工具生成RSA公钥和私钥。 首先,OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用...
RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被...
私钥加密和公钥解密是RSA算法的核心特性,允许发送者使用接收者的公钥来加密数据,而只有持有对应私钥的接收者才能解密。在这个特定的案例中,`MyRSA.cs` 文件提供了一个实现,它使用了 `System.Numerics.BigInteger...
这个标题提到的"rsa公钥加密程序"是一个能够利用RSA算法对文件进行加密的应用程序。在VC6环境下编译,这意味着它使用的是微软的Visual C++ 6.0开发环境。 RSA的工作原理基于大数因子分解的困难性。它使用一对密钥,...
(去掉注释13.6kb)微信小程序RSA加密模块,用法请参考文件里面的注释。 //加载RSA模块 var RSA = require('rsa.js'); var rsa_res = new RSA.RSAKey(); //配置公钥证书 let public_n = ''; let public_e = ''; ...
RSA公钥算法是一种广泛应用于网络安全中的非对称加密技术,由Ron Rivest、Adi Shamir和 Leonard Adleman 在1977年提出,因此得名RSA。它基于数论中的两个核心概念:大整数因子分解的困难性和欧几里得算法。在RSA中,...
RSA工具,很经典的软件,RSA算法计算工具,方便计算公钥、私钥
RSA公钥加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同提出,因此得名RSA。这种算法基于数论中的大数因子分解难题,使得只有拥有正确密钥的人才能解密信息,从而保证了数据...
8. **性能优化**:考虑到RSA算法的计算密集型,gorsa可能采用了高效的数学库和优化技术,以提高加密和解密的速度,同时保持代码的清晰和可维护性。 通过这些功能,Go-gorsa库在Go语言的加密安全领域提供了强大的...
在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security.KeyPairGenerator`类。但是,根据你的描述,这里提供的代码是不直接依赖API,而是通过数学计算来...
RSA公钥密码系统是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。该系统基于大整数因子分解的困难性,即找到两个大素数的乘积很容易,但将一个大合数分解为...
在提供的"RSA加密 公钥、密钥生成工具"中,用户可以方便地生成RSA公钥和私钥对,而无需手动执行上述数学步骤。RsaKeys.exe文件很可能是一个执行程序,运行后会提供一个用户界面,允许用户生成并管理他们的RSA密钥对...
在Java中实现RSA公钥加密,你需要先生成一对公钥和私钥。这个过程通常通过Java的`java.security.KeyPairGenerator`类来完成,指定`"RSA"`作为算法。生成的公钥可以安全地分享给其他人,而私钥必须保密。在示例中,...
生成RSA公钥和私钥的基本步骤如下: 1. **创建KeyPairGenerator对象**:首先,我们需要创建一个KeyPairGenerator实例,指定加密算法为RSA。Java中的`java.security.KeyPairGenerator`类提供了这个功能。例如: ```...