数据加密 ---- 总篇

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jingerppp/article/details/83589182

1. 简介

数据加密,是一门历史悠久的技术,指通过加密(Encrytion)算法和加密密钥将明文(plain text)转变为密文(cipher text),而解密(Decryption)则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。

按照作用的不同,数据加密技术可分为数据传输加密技术、数据存储加密技术、数据完整性的鉴别技术和密钥管理技术。

  • 数据传输加密技术的目的是对传输中的数据流加密,通常有线路加密与端—端加密两种。线路加密侧重在线路上而不考虑信源与信宿,是对保密信息通过各线路采用不同的加密密钥提供安全保护。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。
  • 数据存储加密技术的目的是防止在存储环节上的数据失密,数据存储加密技术可分为密文存储和存取控制两种。前者一般是通过加密算法转换、附加密码、加密模块等方法实现;后者则是对用户资格、权限加以审查和限制,防止非法用户存取数据或合法用户越权存取数据。
  • 数据完整性鉴别技术的目的是对介入信息传送、存取和处理的人的身份和相关数据内容进行验证,一般包括口令、密钥、身份、数据等项的鉴别。系统通过对比验证对象输入的特征值是否符合预先设定的参数,实现对数据的安全保护。
  • 密钥管理技术包括密钥的产生、分配、保存、更换和销毁等各个环节上的保密措施。

 

2. 加密技术

加密技术主要包括两个元素:算法和密钥。

算法是将普通的文本(或者可以理解的信息)与一串数字(密钥)的结合,产生不可理解的密文的步骤。

密钥是用来对数据进行编码和解码的一种算法。

目前主流加密手段大致可分为单向加密和双向加密:

  • 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:MD5,SHA
  • 双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为对称加密和非对称加密

MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。

 

下面来看下对称加密和非对称加密:

对称加密技术
    对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。其他算法:3DES,AES,RC4,RC5。

非对称加密技术
    1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。例如,RSA,DSA。

    与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

    原有的单密钥加密技术采用特定加密密钥加密数据,而解密时用于解密的密钥与加密密钥相同,这称之为对称型加密算法。采用此加密技术的理论基础的加密方法如果用于网络传输数据加密,则不可避免地出现安全漏洞。因为在发送加密数据的同时,也需要将密钥通过网络传输通知接收者,第三方在截获加密数据的同时,只需再截取相应密钥即可将数据解密使用或进行非法篡改。

 

3. 分组密码工作模式

对于分组加密算法,会引入工作模式,详细看另一篇博文:分组密码工作模式

在JDK 中使用分组加密算法,有一个公共的入口地址:Cipher 类。

source code 路径为:libcore/ojluni/src/main/java/javax/crypto/Cipher.java

注意的是,不同的算法使用到的工作模式、填充方式都是不同的,而且在JDK中有些是不支持的。

例如,RSA 算法的工作模式只支持EBC。

其他详细看Cipher.java

 

4. 分组加密填充方式

对于填充方式详细看另一篇博文:加密数据的填充方式(Padding)

 

5. 详细使用

数据加密 ---- 异或加密

数据加密 ---- AES 加密

数据加密 ---- DES 加密

数据加密 ---- 3DES 加密

数据加密 ---- MD5 加密

数据加密 ---- SHA-1 加密

数据加密 ---- SHA-2 加密

数据加密 ---- RSA 加密

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页