字符编码
ASCII 编码
基于拉丁字母的一种编码,0~31及127是控制字符或通信专用字符(其余为可显示字符),如控制符:换行、回车、换页删除等。32~126是字符,起终48~57是0-9十个阿拉伯数字。65~90为26个大写英文字母,97~122为26个小写英文字母。其余为一些标点符号、运算符号等。
ASCII编码无法标识汉字等其他文字系统。
占用1个字节(8bits),可以组合出256种状态,高位统一为0,定义了127个符号。
编码对照表
Unicode
对每一个符号都给予一个独一无二的编码,U+0041表示英文大写A,unicode只是一个符号集,只规定了符号的二进制代码,没有规定这个二进制代码应该如何存储(没有规定统一使用几个字节)。这就造成无法区分是两个还是三个字节代表一个符号。造成有很多不同的存储规则,无法统一。
unicode.org
UTF-8
是Unicode编码的一种统一编码方式(之一)。互联网广泛应用,特点是变长的编码方式,它可以使用1~4个字节表示一个符号,根据不同符号变化字节长度。
1)对于单字节符号,字节第一位设0,后面7位为这个符号的Unicode码,对于英文字母,与ASCII码相同。
2)对于n字节符号,第一个字节的前n位设为1,n+1位设为0,后面的字节前两位一律设为10。剩下的位为这个符号的Unicode码
3)不定长编码,每个字符的长度从1-6个字节不等。
| Unicode符号范围(十六进制) | UTF-8编码方式(二进制) |
|—|—|
|0000 0000-0000 007F|0xxxxxxx|
|0000 0080-0000 07FF|110xxxxx 10xxxxxx|
|0000 0800-0000 FFFF|1110xxxx 10xxxxxx 10xxxxxx|
|0001 0000-0010 FFFF|11110xxx 10xxxxxx 10xxxxxx 10xxxxxx|
ISO-8859-1
单字节编码,可以表示前256个unicode字符
GB2312
是一种针对中文的编码方式,使用两个字节表示一个汉字,理论上有256*256=65536种字符。
Base64编码
是什么?
本质是将二进制数据转换为文本数据的方案。对于非二进制数据,先将其转换为二进制数据,然后连续每6bits(2的6次方等于64)计算其十进制值,根据该值在索引表中找到对应的base64编码字符,最终得到一个文本字符串。
如果原始字符串长度不能被3整除,用0补充原始字符串,转换成base64编码后,结尾为A,由于A实际不带实际含义,所以通常用=代替结尾的A,其意义在于结束符号。
什么时候使用?
1.Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP传输二进制数据需要将二进制数据转化为字符数据, 网络传输只能传输可打印字符,在ASCII码中规定,0-31、127这33个字符属于控制字符(回车,删除等),32~127这95个字符属于可打印字符,那么其它字符怎么传输呢,Base64就是其中一种方式,
2.将图片等资源文件以Base64编码形式直接放于代码中,使用的时候反Base64后转换成Image对象使用。
3.偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到Base64,比如多功能Internet 邮件扩充服务(MIME)就是用Base64对邮件的附件进行编码的。
摘要算法(哈希算法或散列算法)
任何消息经过散列函数处理后,都会获得唯一的散列值,这一过程称为 “消息摘要”,其散列值称为 “数字指纹”,其算法自然就是 “消息摘要算法”了。换句话说,如果其数字指纹一致,就说明其消息是一致的。
特点:
- 无论输入的消息多长,最终输出的消息摘要的长度相同。如md5算法摘要的信息有128位,SHA-1算法最终有160位。
- 相同输入产生相同摘要,不同输入产生不同摘要
- 摘要算法函数是单向函数,无法逆向,只能暴力尝试破解。
MD5算法(信息摘要算法)
MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。
SHA算法
是基于MD4算法实现的,SHA 与 MD 算法不同之处主要在于摘要长度,SHA 算法的摘要更长,安全性更高。
算法 | 摘要长度 |
---|---|
SHA-1 | 160(主要应用在CA和数字证书中) |
SHA-256 | 256 |
SHA-384 | 384 |
SHA-512 | 512 |
MAC算法
MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了 MD 和 SHA 算法的特性,并在此基础上加入了密钥。因为 MAC 算法融合了密钥散列函数(keyed-Hash),通常我们也把 MAC 称为HMAC(Keyed-Hash Message Authentication Code)。
UUID 随机数构成
UUID的编码规则:
- 1~8位采用系统时间,在系统时间上精确到毫秒级保证时间上的惟一性;
- 9~16位采用底层的IP地址,在服务器集群中的惟一性;
- 17~24位采用当前对象的HashCode值,在一个内部对象上的惟一性;
- 25~32位采用调用方法的一个随机数,在一个对象内的毫秒级的惟一性。
通过以上4种策略可以保证惟一性。在系统中需要用到随机数的地方都可以考虑采用UUID算法。
AES算法
AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。
RSA算法
RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。