`

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

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


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

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

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
分享到:
评论

相关推荐

    密码学实验_对称加密算法DES_非对称加密算法RSA.pdf

    本实验报告主要涉及两种加密算法:对称加密算法DES(Data Encryption Standard)和非对称加密算法RSA。实验旨在帮助学生深入理解这两种算法的基本原理,并通过Python编程实现加密和解密过程。 ### **对称加密算法...

    物联网之安全算法:加密算法(AES, RSA):非对称加密算法原理与应用.docx

    物联网之安全算法:加密算法(AES, RSA):非对称加密算法原理与应用.docx

    非对称加密算法

    而非对称加密算法则采用了一对密钥,包括一个公钥和一个私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密数据。这种设计使得即使公钥被他人获取,也无法解密由私钥加密的信息,极大地增强了通信...

    对称加密算法与非对称加密算法.doc

    综上所述,对称加密算法和非对称加密算法各有优势,在实际应用中往往结合使用,以实现高效安全的数据传输。例如,在实际的Web安全通信中,通常先使用非对称加密算法交换会话密钥,再利用该会话密钥进行对称加密传输...

    R S A 非对称加密算法

    RSA非对称加密算法是密码学中的一个重要概念,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种基于大素数分解困难性的公钥加密算法,对于网络安全、数据保护以及数字签名等领域具有...

    物联网之安全算法:加密算法(AES, RSA):对称加密算法原理与应用.docx

    物联网之安全算法:加密算法(AES, RSA):对称加密算法原理与应用.docx

    用.NET非对称加密算法实例

    ### 使用.NET非对称加密算法实例 #### 一、引言 非对称加密是一种重要的加密方式,在现代信息安全领域有着广泛的应用。与对称加密不同的是,非对称加密使用一对密钥:公钥和私钥。公钥可以公开分发,而私钥则必须...

    对称加密算法分析及用Java实现.zip

    总的来说,“对称加密算法分析及用Java实现.zip”这个资料包将帮助你深入理解对称加密的原理,并通过Java实践来掌握其实现。通过学习这部分内容,你能够有效地在自己的项目中应用对称加密,保障数据的安全性。

    Rsa.rar_RSA 算法_java 非对称 加密 算法_rsa java

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据传输中的安全保护。这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件...

    对称加密和非对称加密介绍和区别

    - **RSA**:最知名的非对称加密算法之一,广泛应用于各种加密场景。 - **ECC(椭圆曲线加密)**:在移动设备中广泛应用,因为它可以在较短的密钥长度下提供更高的安全性。 - **Diffie-Hellman**:主要用于密钥交换。...

    Java实现的对称加密算法AES定义与用法详解

    下面我们将详细介绍Java实现的对称加密算法AES的定义、特点、用法及使用场景。 一、AES的定义 AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,使用同一个密钥进行加密和解密。AES算法的...

    椭圆曲线非对称加密算法

    **椭圆曲线非对称加密算法详解** 椭圆曲线非对称加密算法(Elliptic Curve Cryptography,简称ECC)是一种基于数学难题——椭圆曲线离散对数问题的现代密码学技术。与传统的RSA等非对称加密算法相比,ECC在安全性...

    Aes对称加密算法原理

    ### Aes对称加密算法原理 #### 概述 AES(高级加密标准,The Advanced Encryption Standard)是由美国国家标准与技术研究所(NIST)制定的一种用于加密电子数据的标准规范。自2002年5月26日确立以来,AES成为了...

    非对称加密工具GNUPG及使用详解.rar

    GNUPG实现了RSA、ElGamal和DSA等非对称加密算法,提供了一套完整的工具集,包括密钥生成、密钥管理、数据加密和数字签名等功能。在使用GNUPG之前,你需要生成一对密钥:`gpg --gen-key`命令可以引导用户创建一个新的...

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

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

    非对称加密技术详解

    非对称加密技术是一种在现代信息安全领域中占据核心地位的加密方式,相较于传统的对称加密算法,它引入了一种全新的密钥管理机制,即使用一对密钥——公钥和私钥来进行加密和解密操作。这一技术的诞生,解决了信息...

    非对称加密算法RSA

    本实验旨在通过实际编程来深入了解非对称加密算法RSA的基本原理及其加密和解密过程,进一步加强学生对非对称加密技术的理解与掌握。 #### 三、实验原理 **非对称加密算法**的特点在于使用一对密钥——公钥和私钥,...

    文件内容加密工具(非对称RSA加密算法版)

    在实际应用中,可能会先用RSA加密一个随机生成的会话密钥,然后使用更快速的对称加密算法(如DES或AES)来加密大量数据,这样既能保证安全性,又能提高效率。 在这个程序中,没有提及DES加密和XML加密。DES(Data ...

    RSA非对称加密算法的实现.zip

    RSA非对称加密算法是密码学中的一个重要概念,它的出现极大地推动了网络安全的发展。这个算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是基于大数因子分解的困难性,为数据交换和...

    对称加密算法(vb)

    在IT领域,对称加密算法是一种广泛应用于数据保护和信息安全的技术。VB,即Visual Basic,是一种流行的编程语言,尤其在开发Windows应用程序时被广泛应用。在这个压缩包中,我们有两个使用VB实现的对称加密算法,一...

Global site tag (gtag.js) - Google Analytics