python3 MD5加密用法

我们做登录的时候都不是明文处理不安全,所以推荐MD5的用法,以后再更新其他的加密方法

首先现安装包

pip install hashlib

1.第一种方法,密码定死不能改的形式

import hashlib
str_md5 = hashlib.md5(b'123456').hexdigest()
print('MD5加密后为 :' + str(str_md5).upper())

MD5括号中就是定死的形式,
2.第二种可以修改形式,比较常用

import hashlib
str = '123456'
# 创建md5对象
m = hashlib.md5()
# 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
# b = str.encode(encoding='utf-8')
b = bytes(str, encoding='utf-8')
m.update(b)
str_md5 = m.hexdigest()
str_md5 = str_md5.upper()
print('MD5加密前为 :' + str)
print('MD5加密后为 :' + str_md5)

仅供参考。

Python 3下AES加密的常用方法

** 第一步,安装crypto**
pip install crypto
** 第二步,安装pycryptodome**
pip install pycryptodome
第三步,改文件夹名称
进入Python3的目录下的\lib\site-packages,将crypto文件夹更名为Crypto(注意是大写的C,否则导入模块失败

import base64
from Crypto.Cipher import AES

import base64
from Crypto.Cipher import AES


# AES加密
def aes_crypt(key, iv, passwd):
    """
    AES加密算法(key,iv,passwd输入均应为bytes类型,选择MODE_CBC类型加密)
    :param key: 秘钥(定值,16位长度)
    :param iv: 偏移(定值,位长度)
    :param passwd: 密码
    :return: 返回值再经过base64加密后
    """
    BS = AES.block_size  # 获取AES数据位数(16位)
    # 补位,补够16位
    pad = (lambda s: s + (BS - len(s) % BS) * '#')
    print(pad(passwd))
    aes = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    return base64.b64encode(aes.encrypt(pad(passwd).encode('utf-8')))


aes_key = 'QYFfyuDHGUIbplmn'
aes_iv = '1111115642223454'
password = '123456'
# 注意,经过aes_crypt加密的密文是bytes类型
password = aes_crypt(aes_key, aes_iv, password).decode('utf-8')
print(password)

url加密
我们访问网址时系统会将我们的输入的文字进入url加密,如

http://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91

那么‘%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91’到底是什么呢?
解密
首先导入from urllib import parse

粘贴代码操作下就知道了

from urllib import parse
from urllib import request


url = 'http://www.baidu.com/s?'
dict1 ={'wd': '百度翻译'}
url_data = parse.urlencode(dict1) #unlencode()将字典{k1:v1,k2:v2}转化为k1=v1&k2=v2
print(url_data)             #url_data:wd=%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91
data = request.urlopen((url+url_data)).read() #读取url响应结果
data = data.decode('utf-8') #将响应结果用utf8编码
with open('1.html', 'w', encoding='utf-8')as f:
    f.write(data)
# print(data)
url_org = parse.unquote(url_data) #解码url
print(url_org)   

查看资料看到可以自己写加密与君共享

def encrypt(s):
    b = bytearray(str(s).encode("gbk"))
    n = len(b)  # 求出 b 的字节数
    c = bytearray(n * 2)
    j = 0
    for i in range(0, n):
        b1 = b[i]
        b2 = b1 ^ n  # b1 = b2^ key
        c1 = b2 % 16
        c2 = b2 // 16  # b2 = c2*16 + c1
        c1 = c1 + 65
        c2 = c2 + 65  # c1,c2都是0~15之间的数,加上65就变成了A-P 的字符的编码
        c[j] = c1
        c[j + 1] = c2
        j = j + 2
    return c.decode("utf8")


def decrypt(s):
    c = bytearray(str(s).encode("utf8"))
    n = len(c)  # 计算 b 的字节数
    if n % 2 != 0:
        return ""
    n = n // 2
    b = bytearray(n)
    j = 0
    for i in range(0, n):
        c1 = c[j]
        c2 = c[j + 1]
        j = j + 2
        c1 = c1 - 65
        c2 = c2 - 65
        b2 = c2 * 16 + c1
        b1 = b2 ^ n
        b[i] = b1
    try:
        return b.decode("gbk")
    except:
        return "failed"

s1 = encrypt('123456')
s2 = decrypt(s1)

s1是加密结果
s2是解密
完美 (ಥ_ಥ)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值