1、编码格式、编码标准Unicode、摘要算法、二进制转化法Base64、url encode、对称加密、非对称加密(公钥加密)、数字签名算法、MAC算法

版权声明:欢迎转载交流,声明出处即可。体能状态先于精神状态,习惯先于决心,聚焦先于喜好 ——Bestcxx https://blog.csdn.net/bestcxx/article/details/90707630

前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好

几个容易混淆的概念

编码格式比如 GBK,UTF-8
Unicode 是一种标准规范,其实现有 使用8位、16位和32位编码单元,分别为UTF-8、UTF-16、UTF-32
摘要算法比如MD5,是不可逆的,常用语检测数据完整性
二进制转化法 Base64是一种基于64个可打印字符来表示二进制数据的方法,可以讲字符串和二进制自由转化,强调这不是加密方法
url encode,用于对url中特殊字符和中文进行转义,便于浏览器正常处理
对称加密算法,比如 DES、AES,特点是对一段数据加密,加密和解密的key一样
非对称加密算法,比如RSA,特点是需要两个key,一般叫做 public key 和 private key,使用其中一个key加密,另一个key可以解密。

编码格式

编码标准Unicode

ASCII、UTF8、GBK、gb2312 等

摘要算法

Base64 简介

Base64就是一种基于64个可打印字符来表示二进制数据的方法。
可查看RFC2045~RFC2049
其实从某种程度来说,Base64 更像是和UTF8 、GBK 一样的一种编码格式,不同之处在于,Base64 仅仅是为了将字节数组转化为字符串——看起来乱糟糟的,所以你又无法将其认定为一种字符编码格式,比如UTF8或GBK,你可以认识他们是一种文字或者符号.

Base64 提供了字节数据和字符串之间的转化能力

Base64 提供了这样的能力:
1、将字节数组转化为 Base64 编码的字符串-看起来像乱码
2、将Base64 字符串转化为字节数组
至于字符组数,其可能来自于UTF8编码格式的字符串,也可能来自GBK编码的字符串,但是不管怎样,在使用Base64编码的字符串时你是不需要关心编码格式问题的

Base64 的标准编码规则

本质来说,Base64 是一种将字节转化为字符的规则和实现.
Base64 使用64个基本可打印符号

10个数字:0-9
26个小写字母:a-z
26个大写字母:A-Z
2个符号:+,/

Base64 编码规则存在变种

由于标准 Base64 中存在的符号 + 和 / 在有些场景下会被自动转义,所以在使用Base64 进行实际应用时,比如在URL中、在保存数据库中都会涉及到特殊符号的转化问题.
你可以理解为,在实际使用中,Base64的基本编码字符并不限于64个符号,可能会根据具体变种包含其他符号,比如=、!、-、_等

以下内容摘自百度百科:
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充’='号,并将标准Base64中的“+”和“/”分别改成了“-”和“”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“
-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“:”(用于XML中的Name)。

Base64 的编码长度比原字符长约1/3

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
之所以是理论上的,是因为不同的编码格式对字符处理的规则也是不尽相同的,也存在不同程度的补位问题.

Base 64 不是加密算法

Base64 最常见的误解就是任务其是一种加密方法,这是大大的错误.
从其使用来看一般是 encode-编码和decode-解码
其主要是为了解决不同字符编码之间的通用表达的问题

Base64的使用场景

由于Base64 看起来是乱码一般,所以可以作为数据处理的一部分
Base64 可以用于不同系统之间的数据交换——其没有字符编码属性,不会出现所谓的乱码问题——当然,在你将Base64还原为原字符编码格式对应的字符串时依旧要注意.

Base64 在 Java 中的使用

建议使用 jdk1.8 提供的方法,或者 Apache Commons Codec 提供的方法.
请移步:Base64 在 Java 中的几个实现方式

url encode

对称加密

非对称加密(公钥加密)

RFC2246:美国政府不允许包含 大于 512位key的 RSA 加密模块的软件的出口,但是并没有限制大于 512位key的RSA 算法用于数字签名.
RSA非对称加密,被加密明文限制长度117,被解密密文 长度限制128

数字签名算法

MAC 算法

参考资料

[1]、https://www.cnblogs.com/sunxuchu/p/5483956.html
[2]、https://www.jianshu.com/p/a8070920810d
[3]、https://www.cnblogs.com/sunxuchu/p/5483956.html
[4]、https://baike.baidu.com/item/base64/8545775?fr=aladdin
[5]、https://blog.csdn.net/qq_20545367/article/details/79538530

猜你喜欢

转载自blog.csdn.net/bestcxx/article/details/90707630