python aes 加盐 加密解密

python aes 加盐 加密解密

爬虫就是在学习的过程,前几天从某网站的js里学到的加密方式,通过下断点弄清加密原理后,用python复现一下,在这里和大家分享下

#--------引入模块--------
from Crypto.Cipher import AES
import base64
import time
import random
from hashlib import md5
from Crypto.Util.Padding import pad,unpad

#--------函数区--------
def md(s,salt):#md5加密,盐加在了末尾,这个可以自定义,加在开头,加在中间斗ok的,只要两端的加密方式统一就可以
    mdd=md5()
    mdd.update(s+salt)
    return mdd.digest()

def dec(key,iv,data):#aes解密
    decc= AES.new(key,AES.MODE_CBC,iv)
    result=unpad(decc.decrypt(data),block_size=16).decode()
    return result

def enc(key,iv,data):#aes加密
    decc = AES.new(key, AES.MODE_CBC, iv)
    result=decc.encrypt(pad(data.encode(),block_size=16))
    return result

def saltenc(xdata, ts):  # 加盐解密
 password = 'xxxxxxxxxxxxxxxxxxx:' + ts  # 加密的原始key,可以是你任意想输入的内容,也可以像这样由固定字符串和时间戳决定,同时兼顾了校验的功能
 salt = md(str(random.random()).encode(), b'')[4:12]  # 随机生成盐,8位,其他位数也是可以的,影响不是很大
 st = md(password.encode(), salt)  # 第一次md5
 keys = md(st + password.encode(), salt)  # 第一次md5的结果加上原始key再进行一次md5
 key = st + keys  # 两次加密结果衔接作为32位的加密key
 iv = md(keys + password.encode(), salt)  # 将得到的key再和原始key相加进行一次md5,作为偏移量iv
 encda = enc(key, iv, xdata)  # 使用加密key和iv进行加密
 result = base64.b64encode(b'Salted__' + salt + encda).decode()  # 返回结果带上salted和盐,进行base加密
 return result

def saltdec(xdata,ts):#加盐加密
    password = 'xxxxxxxxxxxxxxxxxxx:' + ts#加密的原始key
    s=base64.b64decode(xdata)#base64解密
    data=s[16:]#数据从第17位开始
    salt=s[8:16]#这里是盐的位置
    st=md(password.encode(),salt)#第一次md5
    keys=md(st+password.encode(),salt)#第一次md5的结果加上原始key再进行一次md5
    key=st+keys # 32位的加密key由两次加密结果衔接得到
    iv=md(keys+password.encode(),salt)#将得到的key再和原始key相加进行一次md5,得到偏移量iv
    result=dec(key,iv,data)# 使用加密key和iv进行解密
    return result

def test():#测试函数
    unenc_data='i am laowei'#原始数据
    timestamp = str(int(time.time() * 1000))#13位时间戳
    enc_data=saltenc(unenc_data,timestamp)#加密
    print(enc_data)#打印加密后数据
    dec_data=saltdec(enc_data,timestamp)#解密加密数据
    print(dec_data)#打印解密数据

test()

ps:知道了算法,很多东西就可以不拘泥于形式,比如说md5时盐的位置,原始key的选择,原始key换为加密key的方式,也可以不局限于md5,sha256也是不错的选择,甚至是几种hash方式配合使用
在这里插入图片描述
老魏的公众号,会发布一些个人爬虫的案例和经验,欢迎大家一起来交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值