一文读懂Base64编码和MD5

作者: 叫我老村长 | 来源:发表于2018-11-17 18:36 被阅读4次

Base64编码

简述

Base64是一种用64个字符来表示任意二进制数据的方法。

Base64编码可以成为密码学的基石。可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右。

Base64编码的原理

[图片上传失败...(image-456e10-1542450907355)]

  1. 将所有字符转化为ASCII码。
  2. 将ASCII码转化为8位二进制 。
  3. 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。
  4. 统一在6位二进制前补两个0凑足8位。
  5. 将补0后的二进制转为十进制。
  6. 从Base64编码表获取十进制对应的Base64编码。

Base64编码的说明

  1. 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
  2. 数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
  3. 不断进行,直到全部输入数据转换完成。
  4. 如果最后剩下两个输入数据,在编码结果后加1个“=”。
  5. 如果最后剩下一个输入数据,编码结果后加2个“=”。
  6. 如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

Python的Base64使用

Python内置的base64模块可以直接进行base64的编解码

注意:用于base64编码的,要么是ASCII包含的字符,要么是二进制数据

In [1]: import base64

In [2]: base64.b64encode(b'hello world')
Out[2]: b'aGVsbG8gd29ybGQ='

In [3]: base64.b64decode(b'aGVsbG8gd29ybGQ=')
Out[3]: b'hello world'


MD5(信息-摘要算法)

简述

message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

md5,其实就是一种算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

不可逆性

每个人都有不同的指纹,看到这个人,可以得出他的指纹等信息,并且唯一对应,但你只看一个指纹,是不可能看到或读到这个人的长相或身份等信息。

特点

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

举个栗子:世界上只有一个我,但是但是妞却是非常非常多的,以一个有限的我对几乎是无限的妞,所以可能能搞定非常多(100+)的妞,这个理论上的确是通的,可是实际情况下....

Python的MD5使用

由于MD5模块在python3中被移除,在python3中使用hashlib模块进行md5操作

import hashlib

# 待加密信息
str = '这是一个测试'

# 创建md5对象
hl = hashlib.md5()

# 此处必须声明encode
# 若写法为hl.update(str)  报错为: Unicode-objects must be encoded before hashing
hl.update(str.encode(encoding='utf-8'))

print('MD5加密前为 :' + str)
print('MD5加密后为 :' + hl.hexdigest())

运行结果

MD5加密前为 :这是一个测试
MD5加密后为 :cfca700b9e09cf664f3ae80733274d9f

MD5长度

md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。

为什么网上还有md5是16位的呢?

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

参考出处:https://www.jianshu.com/p/4ba20afacce2

相关文章

网友评论

    本文标题:一文读懂Base64编码和MD5

    本文链接:https://www.haomeiwen.com/subject/lmsifqtx.html