马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 LYF511 于 2020-3-20 20:30 编辑
今天我们来继续学习Python Web开发【5】
ps:本课程没有特别深奥的地方(如:数据库等),会Python和一点html基础就可以学习!
题外话:这个主题好像有点冷门。。。
没关系,我们继续做
今天,我们来完善第4课的实例
1.加密数据
首先,我们了解一下流行的加密方法,如图:
现在,你应该知道我们今天要用什么加密算法了
AES
参考资料
方便需要,我们先写个类,并且测试:
要安装第三方模块:Crypto 教程
import base64
from Crypto.Cipher import AES
class aes:
def Add(self, s):
while len(s) % 16 != 0:
s += '\0'
return str.encode(s)
def __init__(self, key, mode):
if len(key) not in (16, 24, 32):
raise KeyError("Key's length must in (16, 24, 32)")
self.aes = AES.new(str.encode(key), mode)
def encrypted(self, text):
text = self.Add(text)
encryptedText = base64.encodebytes(self.aes.encrypt(text))
return str(encryptedText, encoding='utf8').replace('\n', '')
def decrypted(self, text):
text = bytes(text, encoding='utf8')
decryptedText = self.aes.decrypt(base64.decodebytes(text)).rstrip(b'\0').decode("utf8")
return str(decryptedText)
key = '1234567890123456' # 密钥长度必须为16、24或32位,分别对应AES-128、AES-192和AES-256
text = 'abcdefg' # 待加密文本
Aes = aes(key, AES.MODE_ECB)
encrypted_text = Aes.encrypted(text)
decrypted_text = Aes.decrypted(encrypted_text)
print('加密值:', encrypted_text)
print('解密值:', decrypted_text)
print('Key :', key)
print('Text', text)
print(decrypted_text == text)
由于我们需要Key,固定那太容易被别人发现了,所有我们来一个随机Key:
参考资料
import base64
import string
import random
from Crypto.Cipher import AES
class aes:
def Add(self, s):
while len(s) % 16 != 0:
s += '\0'
return str.encode(s)
def __init__(self, key, mode):
if len(key) not in (16, 24, 32):
raise KeyError("Key's length must in (16, 24, 32)")
self.aes = AES.new(str.encode(key), mode)
def encrypted(self, text):
text = self.Add(text)
encryptedText = base64.encodebytes(self.aes.encrypt(text))
return str(encryptedText, encoding='utf8').replace('\n', '')
def decrypted(self, text):
text = bytes(text, encoding='utf8')
decryptedText = self.aes.decrypt(base64.decodebytes(text)).rstrip(b'\0').decode("utf8")
return str(decryptedText)
key = ''.join(random.sample(string.ascii_letters + string.digits, 16))
text = ''.join(random.sample(string.ascii_letters + string.digits, random.randint(10, 50)))
Aes = aes(key, AES.MODE_ECB)
encrypted_text = Aes.encrypted(text)
decrypted_text = Aes.decrypted(encrypted_text)
print('加密值:', encrypted_text)
print('解密值:', decrypted_text)
print('Key :', key)
print('Text', text)
print(decrypted_text == text)
有了这些基础,这个就简单,改一改main.py就行
出于安全性考虑,每次登陆或者注册都改一次密钥,base64加密保存
鱼油们先想一想,再看答案哟!
2.做的真正登录
待更新。。。
|