`

非对称加密算法原理及应用

阅读更多
一、什么是非对称加密算法


加密和解密所用的密钥是不一样的,所以叫“非对称”。
非对称加密算法的这两个密钥,一个称为公钥,一个称为私钥。

所谓公钥和私钥不是绝对的,公钥和私钥只是经过算法运算得到的一对数值,公开的那一个值称为公钥,不公开的称为私钥。
用公钥加密的,可以用私钥解密,反过来也成立。

RSA就是典型的非对称加密算法。
关于RSA算法的解释,最经典的当然是阮一峰老师的博客了:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
想当初我看懂之后还在纸上自己推导了一遍,可惜后来又忘记了,只记得一个欧拉定理。。


二、使用非对称加密算法通信的原理

由于非对称加密算法一般比较慢,因此他一般用于密钥交换。这个交换的密钥就是指对称密钥。

通常,发送方用公钥加密,接收方用私钥解密。假如你是接收方,你可以把公钥公开出去,那其他人想要与你通信时,先用你的公钥把对称密钥加密后传递给你,你再通过私钥解密得到对称密钥。从这以后,双方都有对称密钥了,双方的通信信息就通过这个密钥来加密解密。

知乎上的一个回答说明了同样的过程(https://www.zhihu.com/question/20744215/answer/16056710):
假设我们回到了那个只能寄信的时代,大家都需要和知乎通信,而且通信的内容必须要保密。于是负责接收大家消息的@顾惜朝 想出来一个办法,找了很多把上面说的那种锁(公钥),都用钥匙打开,挂在外面。需要和知乎通信的人,在通信之前,需要拥有另外一把有两个钥匙的锁(对称加密算法),然后把这把锁和其中一把钥匙(对称密钥),放进一个无法被破拆的铁盒子里面,用知乎提供的那把开着的锁把铁盒子锁上。

这时候,这个铁盒子就无法打开了,除了拥有钥匙的顾惜朝。这个装有一把锁和钥匙的铁盒子,可以放心地交到任何一个人手上,然后让他拿去给顾惜朝。顾惜朝拿到这个铁盒子之后,加密通信会话就建立了。她就会用钥匙打开铁盒子,取出锁和钥匙,写下“亲爱的知乎用户,你好,我是顾惜朝”小纸条,放进铁盒子里,然后用你提供的锁把铁盒子锁上,然后交回到你的手上。这个时候,铁盒子被你提供的锁锁上了,除了你和顾惜朝,没有别人有钥匙能够打开这个铁盒子,铁盒子也就可以安全地经过邮递送到你的手上;你收到铁盒子之后,用你自己的钥匙打开锁,读铁盒子里面的消息,然后放进新的小纸条,再寄送回去。

以上就是加密通信的过程。


三、实际例子
3.1 https的通信建立就是用RSA:



第三步的crt public就是服务端的公钥(传说中的证书,当然证书还会包含其他信息),发给了客户端。
第五步的random key就是对称密钥。第五步完成后,对称密钥就交换成功了。

3.2 http接口远程调用参数的加密
以实际项目中,调用A公司的http接口为例:
假设params是可以在公网上安全传输的值,显然不能是明文,那它是怎么来的呢:
伪代码:
params=encrypt(merchantId=111&sences=222&productId=333&extParams=444)

其中的merchantId=111&sences=222&productId=333&extParams=444就是要传递的参数。
加密方法encrypt分三步:用A公司公钥(A公司的私钥在它们那里,不公开)加密再用base64编码再经过url-encode。
可以推知,A公司的解密过程就是先url-decode再base64解密,最后用它的私钥解密得到消息的明文。

那如何保证消息明文没有被篡改呢?
此时就需要我们调用传参时,同时传递数字签名:

假设上一步算得params="555",则最后在http报文体中传递的就是params=555&sign=888,而这个sign就是数字签名:
先hash再用我们的私钥(我们的公钥会直接给到A公司的开发人员,A公司的公钥也是直接给到我们)加密:
String digest = sha1(params);
String rawSign = encodeByPrivateKey(digest);
String sign = urlEncode(rawSign);


可以看到,数字签名不是一成不变的,它随着消息的改变而改变。它与我们现实中的个人签名不同,个人签名每次都是签同一个名字。

A公司接收到签名后,用我们的公钥解密得到消息摘要(假设为digestX),然后把之前解密得到的消息明文hash一下,得到digestY,比较这两个值是否相等,则可以知道消息有没有被篡改。
说到这里我们发现,我们需要提前与A公司协定好hash算法(例如sha1)。

那黑客有没有可能同时篡改消息和签名呢?不可以,因为他没有我们的私钥,改不了签名。
在这http调用过程中,总结一句话:
用对方的公钥来加密消息,用我们自己的私钥来签名。

  • 大小: 61.6 KB
2
1
分享到:
评论

相关推荐

    RSA非对称加密算法

    主要介绍RSA非对称加密算法的由来和应用场景,以及加密原理

    PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;

    PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...

    网络安全原理与应用:非对称加密算法.pptx

    非对称加密算法 第2章 密码学技术 目标 Objectives 要求 了解非对称加密算法的基本概念、基本术语; 了解非对称加密算法中典型的加密算法; 了解非对称加密算法的优点与缺点; 非对称加密算法 一、非对称加密算法...

    stm32实现rsa 64bit非对称加密解密和密钥产生算法

    1.stm32上运行64位密钥的rsa算法,包括密钥产生,加密,解密和验证。 2.提供vs的源码工程文件,实现密钥产生验证,及stm32 可执行文件插入密钥 3.说明文档和rsa原理。 4.可以实现stm作为电子狗类似的系统保护器件。

    网络安全原理与应用:对称加密算法.pptx

    对称加密算法一、什么是对称加密算法明文:待加密的数据密文:加密后的数据密钥:加密过程中或解密过程中输入的数据加密算法:将明文和密钥相结合进行处理,生成密文的方法解密算法:将密文和密钥相结合进行处理,...

    数字签名和加密的基本原理及其区别

    数字签名使用的是发送方的密钥对,发送方用自己...另外,数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法。

    Java中常用的加密算法及其实现原理详解-保护信息的铠甲,静默守护你的隐私

    Java中常用的加密算法及其实现原理详解——保护信息的铠甲,静默守护你的隐私 内容简介: 1、对称加密算法 2、非对称加密算法 3、散列算法 4、数字签名算法 5、应用场景

    Java对称加密算法DES实例详解

    主要介绍了Java对称加密算法DES,结合实例形式详细分析了java DES算法的概念、原理、实现方法与应用场景,需要的朋友可以参考下

    竞赛资料源码-基于非对称加密算法的Python源码保护.zip

    功能与质量保证:这个资源库是一个宝贵的学习平台,有助于他们深入了解计算机技术的原理和应用。这些源码经过测试和验证,可以直接运行,方便学生快速上手并开始实践。 【应用场景】: 竞赛准备:适用于各种教育部...

    基于JAVA代码非的对称加密RSA的实现及其源代码

    此外,我们还将介绍RSA加密算法的历史和基本原理,以及RSA加密算法在现代网络安全领域中的应用。通过本文档的学习,您将能够全面了解RSA加密算法的各个方面,并了解如何在实际应用中使用它来保护您的数据。如果您...

    非对称加密体制中RSA算法的研究

    在网络安全状况日益严重的情况下,需要有一种强有力的安全加密方法来保护重要的数据不被窃取和篡改,非对称加密体制利用公钥和私钥来解决对称加密体制的安全性的缺点,RSA加密算法是实现非对称加密体制的核心,...

    对称加密和消息机密性.ppt

    加密的基本概念 对称加密的基本原理 DES算法的基本原理 分组密码的工作模式 对称密码的密钥管理 对称加密的应用

    Java加密与解密的艺术.mobi

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    《Java加密与解密的艺术》源码

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景。Java开发者将...

    Java加密与解密的艺术配书源代码

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    JAVA加密与解密的艺术--第2版.rar

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    Java加密与解密的艺术

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    [Java加密与解密的艺术].梁栋.扫描版.pdf

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    Python程序设计:RSA 数据加密.pptx

    RSA算法是属于非对称加密算法,即加解密的秘钥不同。 RSA算法原理:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 RSA的安全性依赖于大数分解,但...

    Java毕业设计-基于JAVA的RSA文件加密软件的设计与实现(源代码+论文).rar

    **基于Java的RSA文件加密软件的设计与实现** ...* Java学习者:通过学习和实践本项目,可以掌握RSA非对称加密算法的原理和应用。 * 软件开发者:可作为加密模块嵌入到其他Java应用中,提高数据安全性。

Global site tag (gtag.js) - Google Analytics