1. MD5
MD5算法属于Hash算法一类。MD5算法对输入任意长度的消息进行运行,输出128位(32位的数字字母混合码)。不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样。
python实现
from hashlib import md5 # MD5是一个大的hash算法,不是加密,它不存在解密的逻辑
# hash算法是不可逆的
# 可以加盐(相当于密钥)(可以不加
salt = "生日:06-26"
salt = salt.encode("utf-8") # 用字节形式
# 加密器
# obj = md5() # 不加盐
obj = md5(salt) # 加盐
# 准备好要加密的内容
password = "身份证: 5115442355851258741112" # 此身份证不含任何信息
obj.update(password.encode("utf-8"))
"""
利用字节是为了满足各种环境,字符串可以进行md5运算,某个文件的下载也可以进行md5运算
"""
# 获取到密文
miwen = obj.hexdigest()
print(miwen) # b5151eed9f9e07e5feb3d1703d4419d8
print(miwen) # 加盐后: 4715a106a2de48adf29e6909ae481ffa
对文件进行md算法运算
先准备一个文件,不管是什么类型,txt,csv,docx,jpg,mp4等等都可以
python实现
from hashlib import md5
obj = md5() # 可自行加盐
with open("刘宪华.txt",mode="rb") as f: # 刘宪华.txt是我事先准备好的文件
for line in f:
# print(line)
obj.update(line)
print(obj.hexdigest()) # 8f133287cba3575e4750b31cea713d14
# 如果我删除了末尾句号 得到的结果 天差地别
print(obj.hexdigest()) # 3fd5379544f4521474846e56b708f570
sha sha和md5是相类似的,python代码和md5几乎一模一样
from hashlib import sha1,sha256,sha512,sha224,sha384,sha3_224 # MD5是一个大的hash算法,不是加密,它不存在解密的逻辑
"""
sha和md5都从属于hash算法,所以只需要将md5换成sha算法就可以了
"""
# hash算法是不可逆的
# 可以加盐(相当于密钥)
salt = "生日:06-26"
salt = salt.encode("utf-8")
# 加密器
obj = sha1(salt) # sha256,sha512,sha224,sha384
# 准备好要加密的内容
password = "身份证: 5115442355851258741112"
obj.update(password.encode("utf-8"))
"""
利用字节是为了满足各种环境,字符串可以进行md5运算,某个文件的下载也可以进行md5运算
"""
# 获取到密文
miwen = obj.hexdigest()
print(miwen) # b5151eed9f9e07e5feb3d1703d4419d8
print(miwen) # 加盐后: 4715a106a2de48adf29e6909ae481ffa
2.urlencode
简单看一个小案例就是,直接百度搜索刘宪华,抓包看到的结果:https://www.baidu.com/s?wd=%E5%88%98%E5%AE%AA%E5%8D%8E
明明只输入了一个“刘宪华” :我们可以用python来实现urlencode(url + encode)
from urllib.parse import urlencode,unquote
# 准备url
base_url = "http://www.baidu.com/s?"
# 后面的参数为 ?x1=xxxx1&x2=xxxx2&x3=xxxx3&....
# https://www.baidu.com/s?wd=%E5%88%98%E5%AE%AA%E5%8D%8E&rsv_spt=1&rsv_iqid=0xcf31c5200009f0a5&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=49055317_28_hao_pg&rsv_dl=tb&rsv_enter=1&rsv_sug3=30&rsv_sug1=15&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=%25E5%2588%2598%25E5%25AE%25AA%25E5%258D%258E&rsp=5&inputT=9160&rsv_sug4=9891
param_dic = {
"wd":"刘宪华",
}
result = urlencode(param_dic)
print("wd的值"+result) # wd=%E5%88%98%E5%AE%AA%E5%8D%8E 和某°的第一个参数一模一样
url = base_url + result
print("urlencode后的结果: "+url) # urlencode后的结