我们做登录的时候都不是明文处理不安全,所以推荐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是解密
完美 (ಥ_ಥ)