公钥加密,私钥解密。
私钥加密,公钥解密。
私钥签名,公钥验签。
一、公钥密码算法误区
误解一、公开密钥加密在防范密码分析上比常规加密更加安全。
[解释] 事实上,任何加密方案的安全性都依赖于密钥的长度和破译密码所包含的计算工作量。从抗击密码分析的角度讲,无论常规还是公开密钥加密原则上都没有比对方优越的地方。
误解二、公开密钥加密是一个使得常规加密已经过时的通用技术。
[解释] 事实上,由于当前公开密钥加密在计算上的巨大开销,在可以预见的未来常规加密并不会被抛弃。目前大家几乎普遍接受的观点是公开密钥密码算法只限于密钥管理和数字签名等应用。
误解三、与使用常规加密时涉及密钥分配中心的相当繁琐的握手过程相比,使用公开密钥加密后密钥分配就变的非常简单。
[解释] 事实上,使用公开密钥加密仍然需要某种形式的协议,一般这会涉及到一个中心代理,而且整个过程比常规加密中的过程既不简单也不更有效。
二、什么是公钥密码算法
目前存在两种密钥体制:对称密钥体制和非对称密钥体制。对称密钥体制就是加密和解密用同一个密钥。这很好理解,相当于你用你家的钥匙既可以锁上你家的门,也可以打开你家的门。非对称密钥体制就是加密和解密不是同一个密钥。也就是说一个密钥所加密的数据用另一个密钥解密。举个生活中的例子,类似于在机场、火车站、超市以及很多其他公共场所看到的非对称的存物箱。为了安全存储你的财物,你把它们放入存物箱并且投入钱币锁上它。就如同你的住宅钥匙锁上大门一样,钱币锁上了存物箱---在某种意义上,你的钱币就是密钥。锁上门后,你得到另外一把钥匙---也许是一把真正的钥匙;也许只是一张写有号码的纸条。要开启存物箱,你就要使用该钥匙或在键盘上输入号码。而这个时候,你投入多少钱币也是打不开存物箱的。
类似地,我们可以产生一个密码算法,其中一个密钥用来加密数据,另一个用来解密。这个模型的另一说法就是公钥密码学。要加密和解密数据,两个密钥都需要使用,所以其中一个可以公开而不会危害安全性。这个密钥就是公钥。另一个则称之为私钥。我们用公钥加密数据,用私钥解密数据。就好象例子中的任何人都知道用钱币(公钥)锁上存物箱,但仍然打不开存物箱。只有拥有钥匙或写有号码的纸条(私钥)的人才能打开存物箱。
1976年后,提出了多种公开密钥算法,其中许多是不安全的。而那些被视为安全的算法,有许多却不实用,要么密钥太大,要么密文远大于明文。只有少数几个算法既安全又实用。其中有三种算法可以很好的用于加密和数字签名:RSA、ElGamal和Rabin。不过它们都很慢。它们加密和解密速度比对称算法要慢的多,通常是太慢以致无法用于许多快速数据加密。基于这点考虑,很多时候使用混合密码系统。使用带随机会话密钥的对称算法来加密消息,使用公开密钥算法来加密随机会话密钥。
三、RSA公钥密码算法原理
RSA算法是第一个比较完善的公开密钥算法。它既能用于加密也能用于数字签名。在已提出的公开密钥算法中,RSA是最容易理解和实现的。RSA以它的三个发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名。该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否认RSA的安全性,但这恰恰说明了该算法有一定的可信度。RSA的安全基于大数分解的难度。其公开密钥和私人密钥是一对大素数(100到200个十进制数或更大)的函数。从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。
RSA
这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。
按如上步骤给出序列图,如下:
1、甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
相关推荐
主要介绍RSA非对称加密算法的由来和应用场景,以及加密原理
.net RSA非对称加密例子
AES对称和RSA非对称加密解密的java实现
RSA非对称 C#解密、js加密实现登陆密文,传输RSA非对称 C#解密、js加密实现登陆密文传输,RSA非对称 C#解密、js加密实现登陆密文传输
RSA非对称加密 通过私钥加密,公钥解密来实现数据的安全交互。公钥私钥存放在单独的文本中,自己替换即可。
C语言实现非对称密码算法RSA,其中RSA计算采用的是平方乘算法
太不安全,应该加密传输,怎么做呢,对称加密一旦秘钥丢失则形同虚设,最好使用非对称加密的方式,由后端事先生成公钥和私钥,公钥发给前端页面,私钥后端自己保留,前端进行认证时,把密码原文用公钥加密再发给后端...
RSA非对称加密工具类,用于网络信息传输中
java rsa非对称加密算法3个实例源代码
内容概要:nacos1.1.4版本修改源码使用非对称加密算法RSA进行用户名和密码加密传输。 适用人群:需要适用nacos作为项目注册中心的相关人员、内网用户。 适用场景:linux或者windows系统,使用nacos作为注册中心,...
基于.Net的MVC模拟登录,RSA非对称加密,web前端加密,C#后端解密。
项目中使用过的一个rsa非对称加密类,用着很不错 ,需要注意的是里边的密钥长度最小是128,不能再小了,还有里边用到了base64的编码,我们用的是jdk 1.8自带的工具类,如果要用的童靴的项目是不jdk 1.8的项目也可以...
RSA非对称加密算法加密器
C#-RSA非对称加密公钥加密 这是一个完整的实例,不像一些网站只有局部代码,有的又只有代码,没有库文件等等。真正的拿到COPY下就用
secruity.js jsencrypt.js RSAjs 三种RSA加解密JS,vue的和正常版本的
完整实验报告,共31页 包括实验目的,实验内容,实验步骤,运行结果,实验总结 附上了源码。 部分内容可见https://blog.csdn.net/guansheng123/article/details/123029969
本程序实现了一个AES对称加密类和一个RSA非对称加密类,既可单独使用AES或RSA加密数据,也可结合使用,本程序给的示例是结合使用的,即用RSA加密AES的密钥,然后用AES的密钥进行数据加密,是一种更安全的技术.
用JAVA实现Rsa非对称加密算法 不算简单的算法 既可以加密又可以解密
.net c# RSA对称加密, 解决加密长度限制,可以直接使用