数据加密的术语以及对称加密、非对称加密、数字签名、数字证书的概念软考必会

这篇博客主要讲述数据加密的基本常识,包括数据加密算法的可逆与不可逆,加密方式的对称与不对称,公钥,私钥,数字签名,数字证书。

基本概念

数据加密的术语有:
明文,即原始的或未加密的数据。通过加密算法对其进行加密,加密算法的输入信息为明文和密钥;
密文,明文加密后的格式,是加密算法的输出信息。加密算法是公开的,而密钥则是不公开的。密文不应为无密钥的用户理解,用于数据的存储以及传输;
密钥,是由数字、字母或特殊符号组成的字符串,用它控制数据加密、解密的过程;
加密,把明文转换为密文的过程;
加密算法,加密所采用的变换方法;
解密,对密文实施与加密相逆的变换,从而获得明文的过程;
解密算法,解密所采用的变换方法。

是不是看的迷迷糊糊,不要紧,后边会详细举例。

加密算法的分类

加密算法分为可逆性加密算法和不可逆行加密算法。

可逆加密

解释: 加密后, 密文可以反向解密得到密码原文.。
可逆加密又分为对称加密和非对称加密

对称加密

文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥
解释: 在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。
优点: 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点: 没有非对称加密安全.,传输范围小,必须双方有相同的密钥,不利于大范围加密传输。
用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。
常见的对称加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256

可能你还没看懂,举例:
tom要发送一段文本给lucy,
明文: abcdefg
密钥:123456789
明文+公钥 —》通过加密算法–》得到密文 :ee548ce71f1c978a
lucy拿到密文后解密,要想解密得有加密时密钥,才能解密,
密文 :ee548ce71f1c978a+密钥–》通过解密算法得到明文:abcdefg

上边的密钥就是一段文本,现在是不是理解密钥是什么了。
对称加密只有一把密钥,要想进行数据加密传输,需要双方都有相同的密钥,不利于数据加密的广泛传输,所以有了非对称加密。

非对称加密

非对称加密需要两个秘钥来进行加密和解密,这两个秘钥非别是公有秘钥(公钥)和私有秘钥(私钥),公钥与私钥是一对,如果用公钥对数据进行加密,那么就必须用对应的私钥才能解密;同理,如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
优点: 非对称加密与对称加密相比,便于大范围传输,其安全性更好;
缺点: 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加
密。
用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或
者签名的解密或者校验使用.
常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用SHA‐256 的 RSA 签名)

可能你还没看懂,举例:
tom要发送一段文本给lucy,
明文: abcdefg
lucy公钥:123456789
明文+lucy的公钥 —》通过加密算法–》得到密文 :ee548ce71f1c978a
lucy拿到密文后解密,要想解密只要用自己的私钥就能解密,
密文 :ee548ce71f1c978a+lucy私钥–》通过解密算法得到明文:abcdefg

在这里插入图片描述
通过私钥可以生成很多公钥,将公钥发给很多人,自己保存私钥就好。

不可逆加密

解释: 一旦加密就不能反向解密得到密码原文.
种类: Hash加密算法, 散列算法, 摘要算法等
用途:一般用于效验下载文件正确性,一般在网站上下载文件都能见到;存储用户敏感
信息,如密码、 卡号等不可解密的信息。
常见的不可逆加密算法有: MD5、SHA、HMAC

数字签名

通过非对称加密可以很好的发送密文,但是有一些问题,
1当tom想给一些人发信息时,用自己的密钥加密,收到密钥的那些人可以用tom的公钥解密,但是很多人都有tom的公钥,其他人只要窃取到密文都能解密,所以可以通过方式2每次只给一个目标人发密文解决,但是还有问题。
2当tom给lucy发信息时,可以用lucy的公钥加密发给lucy,lucy接收后用自己的密钥解密得到明文,但是很多人都有lucy的公钥,有的人可以冒充tom给lucy写信,lucy想确定是谁发来的怎么办呢,于是有了数字签名这一解决方案。

如果甲想给乙发密文,通过数字签名的方式可以这么做:
1.甲先用hash函数对消息进行运算,得到的hash值成为“摘要”,我们就叫它h1吧
2.然后甲用自己私钥对摘要进行加密,生成的密文就叫做“数字签名”,我们就叫它signature吧
3…之后用乙的公钥对消息进行加密,生成的密文就叫secret吧
4.最后把密文secret和signature一起发送给乙
5.乙收到后首先用甲的公钥对signature进行解密,如果能够解密说明消息确实是甲发送的,失败说明不是甲发的
6.然后乙用自己的私钥对密文secret进行解密,并使用相同的hash函数对解密后的结果进行运算,得到一个hash值,我们就叫它h2吧,如果h2=h1,说明消息内容没有被篡改,如果不等于说明消息内容中途被篡改了
流程图如下:
在这里插入图片描述
有了数字签名,我们就可以验证消息来源和消息的完整性了,但是这个过程真的就完美了吗?让我们设想以下场景:如果第三者丙偷偷在乙的电脑用自己公钥替换了甲的公钥,然后用自己的私钥给乙发送消息,这时乙收到的消息其实是被丙冒充的,但是乙却无法察觉,仍认为是甲发送的消息。
为了解决上面这个问题数字证书就出现了。

数字证书

在说数字证书之前,我们首先要搞明白导致发生上面那种情况的根源在哪里?本质上来说就是乙无法区分电脑中公钥到底是谁的,以至于乙会把丙错当成甲,所以我们就要想办法给公钥做身份认证(数字证书),以便能让别人搞清楚公钥到底是谁的。有了数字证书后就可以用以下方式发送消息了:

1.首先甲去找"证书中心"(certificate authority,简称CA),为自己公钥做认证(就好比去公安局办身份证一样)。CA用自己的私钥对甲的公钥和一些其他信息进行加密,生成的东西就叫"数字证书"(Digital Certificate)

在这里插入图片描述
2.甲给乙发送的消息如下:
在这里插入图片描述

3.乙收到消息后用CA的公钥解密甲的数字证书,拿到甲的公钥,然后验证甲的数字签名,后面流程和上面的一样。

如此一来问题就解决了,但是新的问题又出现了:每个人都有一个CA给颁发的数字证书,如果有一百万个人给乙发消息,那么乙就要保存一百万份不同的CA公钥来验证这些人的身份。显然这是不可能接受的,所以就有了“根证书”,里面存储CA公钥来验证所有CA分部颁发的数字证书,乙直接保存一份“根证书”就可以验证所有人的身份了。最后一点就是“根证书”的可靠性有谁来保证呢?确切的来说无法保证,就好像你自己无法证明你是你一样,“根证书”也是如此,只不过CA机构是获得社会绝对认可和有绝对权威的第三方机构,就像政府法院一样,这一点保证了根证书的绝对可靠。如果根证书都有问题那么整个加密体系毫无意义。
文章部分引用:https://blog.csdn.net/kswkly/article/details/83617944 这篇文章写的很好,可以点击观赏。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要进行详细的解答。首先,我们需要明确一些概念术语: 1. 客户端(Client):请求服务的一方。 2. 服务器(Server):提供服务的一方。 3. 加密传输:在传输数据的过程中对数据进行加密,使得数据在传输过程中不易被窃取或篡改。 4. 消息认证:在传输数据的过程中对数据进行校验,确保数据的完整性和真实性。 5. 身份认证:在通信双方之间进行身份验证,确保通信双方的身份合法。 基于以上概念术语,我们可以开始进行程序的设计和实现。 1. 构建基于Netty的Client-Server程序: Netty是一个高性能、异步的网络通信框架,支持多种协议(TCP、UDP、HTTP等),适合构建高可靠性、高并发的网络应用程序。在本实践中,我们可以使用Netty构建一个基于TCP协议的Client-Server程序,实现客户端与服务器之间的通信。具体实现方式可参考Netty官方文档(https://netty.io/wiki/user-guide-for-4.x.html)。 2. 实现“加密传输”、“消息认证”、“身份认证”: 在Netty框架中,可以使用ChannelPipeline实现对通信数据的处理和转换。因此,我们可以在ChannelPipeline中添加一些Handler,实现对数据加密、认证等操作。具体实现方式如下: (1)加密传输:可选择一种对称/非对称加解密算法,如AES、RSA等。在数据发送之前,对待发送的数据进行加密;在数据接收之后,对接收到的数据进行解密。在ChannelPipeline中添加加密/解密Handler即可实现。 (2)消息认证:可选择一种Hash算法,如MD5、SHA等。在数据发送之前,对待发送的数据进行Hash计算,并将Hash值附加到数据中;在数据接收之后,对接收到的数据进行Hash计算,并与接收到的Hash值进行比较。如果Hash值不匹配,则说明数据已被篡改。在ChannelPipeline中添加Hash计算Handler即可实现。 (3)身份认证:可选择数字签名进行身份验证。在通信双方之间进行数字证书的交换,确保通信双方的身份合法。在ChannelPipeline中添加数字签名Handler即可实现。 3. Java实现: Java中有许多现成的加解密算法、Hash算法和数字签名算法可供选择。在实现过程中,可以使用Java标准库或第三方库来实现加解密、Hash计算和数字签名等操作。同时,在Netty框架中也提供了一些现成的Handler,如SslHandler、MessageDigestHandler、SignatureHandler等,可以方便地实现加密、Hash计算和数字签名等操作。 以上是一个大致的实现流程,具体的实现细节还需要根据实际需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值