URLEncode、Base64、MD5、ASCII、 UTF-8

ASCII,Unicode 和 UTF-8

  1. ASCII码
    我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。
    上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,这被称为ASCII

  2. Unicode
    Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
    Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

  3. UTF-8
    UTF-8编码方式是目前使用最广泛的一种Unicode编码方式

  • UTF-8最大的一个特点,就是它是一种变长的编码方式
  • 字符编码为二进制

URLEncode、Base64、MD5

  1. URLEncode

URL编码主要是为了解决一些url中的一些特殊字符和歧义字符或者中文字符的传输问题

  1. Base64
    所谓Base64,就是说选出64个字符:a~z A~Z 0~9 + /(再加上作为垫字的"=",实际65个字符)作为一个基本字符集,所有的数据都可以被编码为并只用65个字符就能表示的文本文件

    • Base64是一种任意二进制文本字符串的编码方法
    • Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。
    • Base64可以理解成可逆加密算法,只能防肉眼看到真实内容
    • Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

数字签名:
数字签名是指将摘要信息私钥加密后,与原文一起传送给接收者。
接收者用公钥解密得到摘要信息,然后对原文也算出摘要信息
对比两信息是否相同,来判断信息是否被修改过。

  1. MD5

MD5加密的特点:

  • 抗修改性 : 对原数据进行任何改动,所得到的 MD5 值都有很大区别
  • 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的
  • 不可逆运算
  • 对不同的数据加密的结果是定长的32位字符(不管文件多大都一样)
  • 相同的数据加密,得到的结果是一样
  • 压缩性: 任意长度的数据,算出的MD5值长度都是固定的。
  • 容易计算: 从原数据计算出MD5值很容易。

MD5 应用:

一致性验证:MD5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要,就像每个人都有自己独一无二的指纹,MD5对任何文件产生一个独一无二的数字指纹。

# 一些加密相关的概念

Hash

哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的就是为了验证原始数据是否被篡改。
特点就是:相同的输入一定得到相同的输出;不同的输入大概率得到不同的输出

hash算法要求:碰撞概率低;不能猜测输出
常见hash算法:MD5(16bytes)、SHA-1(20bytes)、SHA-256(32bytes)

  1. 哈希碰撞
    哈希碰撞是指,两个不同的输入得到了相同的输出

  2. 消息摘要算法:
    加密过程不需要密钥,并且经过加密的数据无法被解密;只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文,主要应用在“数字签名”领域(比如对用户密码加密)

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

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

  5. 对称加密
    加密密钥和解密密钥相同。

  6. 非对称加密
    加密密钥和解密密钥不同,加密密钥(公钥)可以公开而解密密钥(私钥)需要保密,非对称加密通常以RSA(Rivest Shamir Adleman)算法为代表

  7. 彩虹表
    就是预先计算好的常用口令和它们的MD5的对照表,黑客利用这个破密码hash,所以密码不建议用常用口令,比如“hao123”,“19950505”等。如果用户使用了常用口令,我们也可以采取措施来抵御彩虹表攻击,方法是对每个口令额外添加随机数,这个方法称之为加盐(salt):digest = md5(salt+inputPassword)

你可能感兴趣的:(URLEncode、Base64、MD5、ASCII、 UTF-8)