md5密文与明文之间的相互转换
一、字符串编码
我们在加密之前,首选需要做的就是将需要加密的字符串进行编码。编码方式可以使用UTF8、ASCII以及GBK。编码方式的不同会影响到MD5加密的结果。所以在加密之前,我们要选择好合适的编码方式。
UTF-8 编码
UTF-8编码是种可变长度字符编码,针对Unicode的任意字符。TF-8编码的每个字符的长度可以是1-4字节,在进行字符串编码的时候,我们要把字符串当中的每一个字符转换成对应的UTF-8编码。
例如下面代码。使用Python中的encode()函数将字符串转换为UTF-8编码
ASCII 编码
ASCII编码是我们常用的字符编码方式,它需要使用指定的7位或8位二进制数组合来表示128或256种随机的字符。其中就包括了数字和英文以及一些特殊的标点符号。比如A的ASCII 编码为 02000002,数字 1 的 ASCII 编码为 00220002
假如我们对字符串 "sojson"进行编码。如下
GBK 编码
GBK编码是中国大陆制订的一种双字节编码方式。在GBK里面,每一个中文由两个字节来表示,每个字节的取值范围是0x81~0xfe。同样的使用GBK编码进行字符串编码的话需要将字符串中的每个中文字符转换为对应的GBK编码。
例如下面代码,对于字符串 "你好",进行编码
二、MD5加密
对字符串进行勒编码之后,接下来就是MD5加密了,MD5算法是不可逆的,同时还具备唯一性、敏感性等特点。使用Python中的 hashlib 模块可以方便地实现MD5加密。具体步骤如下:
1. 导入 hashlib 模块
```
import hashlib
```
2. 创建一个 hashlib 对象
```
m = hashlib.md5()
```
3. 更新哈希对象以便将输入字符串添加到哈希中
```
m.update(encoded_s)
```
4. 获取哈希对象的摘要
```
digest = m.hexdigest()
print(digest)
```
完整代码如下:
```
import hashlib
s = "hello"
encoded_s = s.encode("utf-8")
m = hashlib.md5()
m.update(encoded_s)
digest = m.hexdigest()
print(digest)
```
三、密文与明文的相互转换
MD5密文和明文之间的转化在工作中经常需要用到。下面给大家带来两个方向的转换方法。
1、MD5密文转明文
由于MD5密文是一种不可逆的操作,所以我们要通过字典破解或者暴力破解来操作,在实际的操作过程中,需要将MD5密文与已知明文进行比对,来判断输入的明文是否正确。
其实现在有很多的大佬都做出了在线的DM5解密工具,我们常用的就有https://www.sojson.com/encrypt.html。在进行解密的时候,要将明文通过上述方式进行编码,然后进行MD5加密,最后将加密后的结果与目标MD5密文进行比对。
2. 明文转MD5密文
明文转MD5密文是可逆的。所以我们只要通过MD5加密将明文转换为固定长度的MD5密文就可以了。下面介绍hashlib进行明文转MD5密文的操作。具体步骤如下
1. 将明文进行编码
```
s = "123456"
encoded_s = s.encode("utf-8")
```
2. 创建一个 hashlib 对象
```
m = hashlib.md5()
```
3. 更新哈希对象以便将输入字符串添加到哈希中
```
m.update(encoded_s)
```
4. 获取哈希对象的摘要
```
digest = m.hexdigest()
print(digest)
```
完整代码如下:
```
import hashlib
s = "123456"
encoded_s = s.encode("utf-8")
m = hashlib.md5()
m.update(encoded_s)
digest = m.hexdigest()
print(digest)
```
总结
对md5密文与明文之间的相互转换今天就介绍到这里拉,希望这边文章对广大朋友们有所帮助。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/415.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。