Java编程自学之路:编码


Base64编码

Base64原理

Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别。

Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,常用在需要通过文本协议(HTTP、SMTP)来传输二进制数据的情况下。

Base64并不是加密解密算法,仅提供编码与解码功能,其变换非常简单,仅能够避免信息被直接识别。

Base64算法主要是将给定的字符以字符编码对应的十进制数为基准,进行编码操作:

  1. 将给定的字符串以字符为单位,转换为对应的字符编码;
  2. 将获得的字符编码转换为二进制;
  3. 对二进制编码进行分组转换,每3个字节为一组,转换为每4个6位二进制为一组(不足时低位补0)。实际上是一个分组变换过程,由3个8位二进制码转换为4个6位二进制码,变换后总长度不变。
  4. 对获得4-6二进制码补位,向6位二进制码高位补0,组成4个8位二进制码;
  5. 将获取的4-8二进制码转换为十进制码;
  6. 将获取的十进制编码转换为Base64字符表中对应的字符。

Base64编码表

索引 对应字符 索引 对应字符 索引 对应字符 索引 对应字符
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y

消息摘要

概述

消息摘要,其实就是将需要摘要的数据做为参数,经过哈希函数计算,得到的散列值。

特点

  • 唯一性:数据只要有一点改变,那么再通过消息摘要算法得到的摘要也会发生变化。虽然理论上有可能会发生碰撞,但是概率极其低。
  • 不可逆:消息摘要算法的密文无法被解密。
  • 不需要密钥,可使用于分布式网络。
  • 长度固定:无论输入的明文有多长,计算出来的消息摘要的长度总是固定的。

算法

消息摘要算法包括**MD(Message Digest,消息摘要算法)SHA(Secure Hash Algorithm,安全散列算法)MAC(Message AuthenticationCode,消息认证码算法)**共 3 大系列,常用于验证数据的完整性,是数字签名算法的核心算法。

MD5SHA1分别是MDSHA算法系列中最有代表性的算法。

如今,MD5 已被发现有许多漏洞,从而不再安全。SHA 算法比 MD 算法的摘要长度更长,也更加安全。

数字签名

概述

数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称加密算法和消息摘要算法的结合体

数字签名算法要求能够验证数据完整性、认证数据来源,并起到抗否认的作用。

数字签名算法包含签名和验证两项操作,遵循私钥签名,公钥验证的方式。

签名时要使用私钥和待签名数据,验证时则需要公钥、签名值和待签名数据,其核心算法主要是消息摘要算法。

数字签名常用算法:RSADSAECDSA

对称加密

概述

对称加密算法主要有DES、3DES、AES、IDEA、RC2、RC4、RC5和Blowfish等。

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文和加密秘钥一起经过特殊加密算法处理后,将其变成复杂的加密密文发送出去。收信方收到密文后,需要使用加密使用的秘钥和相同的算法逆运算对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,秘钥只有一个,发收信双方都使用这个秘钥对数据进行加解密,这要求加解密双方实现必须知道加密秘钥。

对称加密特点:

  • 优点:计算量小,加密速度快,加密效率高。
  • 缺点:算法公开,安全无法保障。

非对称加密

概述

非对称加密常用算法:DH(Diffie-Hellman)、RSA

非对称加密算法和对称加密算法的主要差别在于非对称加密算法用于加密和解密的秘钥是不同的。一个公开,称为公钥(public key);一个保密,称为私钥(private key)。因此,非对称加密算法也称为双钥加密算法或公钥加密算法。

非对称加密算法特点:

  • 优点:安全性高,解决了对称加密算法的秘钥分配问题。
  • 缺点:算法复杂,加解密效率相对于对称加密算法要低。

文章作者: Semon
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Semon !
评论
  目录