python的实用加密模块
说明一:关于MD5,SHA1,SHA256,SHA512加密
这几个哈希算法的加密,都在python的内建模块hashlib里有支持。
本模块的该部分主要参考廖雪峰的python3教程编写,大家根据教程可以进一步了解下。
说明二:关于AES加密
AES加密,用的是第三方模块 pycryptodome。
模块安装命令:pip install pycryptodome
AES有好几种模式,本模块列了ECB,CFB,CBC三种模式。据说,CBC模式是其中公认的安全性最好的模式。至于它们的加密原理,本人精力有限,也没深入研究,大家自行了解下。
本模块的该部分主要参考python3 AES 加密这篇文章编写。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import hashlib
import base64
from Crypto.Cipher import AES##############################################
the_salt = "my_salt"the_key = "my_key"
######################################################class HashManager():#######MD5加密#######def get_md5(self,the_string):the_string_with_salt =the_string + the_saltthe_md5 = hashlib.md5()the_md5.update(the_string_with_salt.encode('utf-8'))the_string_md5 = the_md5.hexdigest()return the_string_md5#######SHA1加密#######def get_sha1(self, the_string):the_string_with_salt =the_string + the_saltthe_sha1 = hashlib.sha1()the_sha1.update(the_string_with_salt.encode('utf-8'))the_string_sha1 = the_sha1.hexdigest()return the_string_sha1#######SHA256加密#######def get_sha256(self, the_string):the_string_with_salt =the_string + the_saltthe_sha256 = hashlib.sha256()the_sha256.update(the_string_with_salt.encode('utf-8'))the_string_sha1 = the_sha256.hexdigest()return the_string_sha1#######SHA512加密#######def get_sha512(self, the_string):the_string_with_salt =the_string + the_saltthe_sha512 = hashlib.sha512()the_sha512.update(the_string_with_salt.encode('utf-8'))the_string_sha1 = the_sha512.hexdigest()return the_string_sha1#######AES加密,ECB模式#######def get_aes_ecb(self, the_string):aes = AES.new(self.pkcs7padding_tobytes(the_key), AES.MODE_ECB) # 初始化加密器encrypt_aes = aes.encrypt(self.pkcs7padding_tobytes(the_string)) # 进行aes加密encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 用base64转成字符串形式return encrypted_text#######AES解密,ECB模式#######def back_aes_ecb(self, the_string):aes = AES.new(self.pkcs7padding_tobytes(the_key), AES.MODE_ECB) # 初始化加密器decrypted_base64 = base64.decodebytes(the_string.encode(encoding='utf-8')) # 逆向解密base64成bytesdecrypted_text = str(aes.decrypt(decrypted_base64), encoding='utf-8') # 执行解密密并转码返回strdecrypted_text_last = self.pkcs7unpadding(decrypted_text) # 去除填充处理return decrypted_text_last#######AES加密,CFB模式#######def get_aes_cfb(self, the_string):key_bytes = self.pkcs7padding_tobytes(the_key)iv = key_bytesaes = AES.new(key_bytes, AES.MODE_CFB, iv) # 初始化加密器,key,iv使用同一个encrypt_aes = iv + aes.encrypt(the_string.encode()) # 进行aes加密encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 用base64转成字符串形式return encrypted_text#######AES解密,CFB模式#######def back_aes_cfb(self, the_string):key_bytes = self.pkcs7padding_tobytes(the_key)iv = key_bytesaes = AES.new(key_bytes, AES.MODE_CFB, iv) # 初始化加密器,key,iv使用同一个decrypted_base64 = base64.decodebytes(the_string.encode(encoding='utf-8')) # 逆向解密base64成bytesdecrypted_text = str(aes.decrypt(decrypted_base64[16:]), encoding='utf-8') # 执行解密密并转码返回strreturn decrypted_text#######AES加密,CBC模式#######def get_aes_cbc(self, the_string):key_bytes = self.pkcs7padding_tobytes(the_key)iv = key_bytesaes = AES.new(key_bytes, AES.MODE_CBC, iv) # 初始化加密器,key,iv使用同一个encrypt_bytes = aes.encrypt(self.pkcs7padding_tobytes(the_string)) # 进行aes加密encrypted_text = str(base64.b64encode(encrypt_bytes), encoding='utf-8') # 用base64转成字符串形式return encrypted_text#######AES解密,CBC模式#######def back_aes_cbc(self, the_string):key_bytes = self.pkcs7padding_tobytes(the_key)iv = key_bytesaes = AES.new(key_bytes, AES.MODE_CBC, iv) # 初始化加密器,key,iv使用同一个decrypted_base64 = base64.b64decode(the_string) # 逆向解密base64成bytesdecrypted_text = str(aes.decrypt(decrypted_base64), encoding='utf-8') # 执行解密密并转码返回strdecrypted_text_last = self.pkcs7unpadding(decrypted_text) # 去除填充处理return decrypted_text_last#######填充相关函数#######def pkcs7padding_tobytes(self, text):return bytes(self.pkcs7padding(text), encoding='utf-8')def pkcs7padding(self,text):bs = AES.block_size####tips:utf-8编码时,英文占1个byte,而中文占3个byte####length = len(text)bytes_length = len(bytes(text, encoding='utf-8'))padding_size = length if (bytes_length == length) else bytes_length####################################################padding = bs - padding_size % bspadding_text = chr(padding) * padding # tips:chr(padding)看与其它语言的约定,有的会使用'\0'return text + padding_textdef pkcs7unpadding(self,text):length = len(text)unpadding = ord(text[length - 1])return text[0:length - unpadding]
本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。
python的实用加密模块相关推荐
- python学会了能做什么-学会Python后都能做什么?介绍五种Python的实用场景
如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例;有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料;还有的学习 ...
- 董老师又双叒叕送书啦,6本《Python程序设计实用教程》
2021年全国高校Python课程高级研修班(线上) 中国大学MOOC"Python程序设计基础"第4次开课 教材信息: <Python程序设计实用教程>,ISBN:9 ...
- 学python可以做什么-学会Python后都能做什么?介绍五种Python的实用场景
如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例;有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料;还有的学习 ...
- Python:第三篇【Python】实用库与框架-关东升-专题视频课程
Python:第三篇[Python]实用库与框架-612人已学习 课程介绍 本课程包括6章.内容包括Python数据交换格式,Python数据库编程,Python网络编程,wxPyth ...
- python创意实用案例-python实用案例
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! (python内部对异常已处理)1 class listiterator(obje ...
- python日常实用小脚本-用Python编写渗透用小脚本 短小实用
网上能找到的python渗透工具并不多,就算找到的python工具也并不适用.所以只有自己的码代码最适合自己,这才是王道!本文中的两个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用!分 ...
- ubuntu python opencv 实用小技巧小结
ubuntu tmux 真的好用: 实用教程: https://wdxtub.com/2016/03/30/tmux-guide/ ctrl + b + [ : 可移动光标 C++ char 和 st ...
- Python+OpenCV实用案例应用教程:建立自定义物体检测器
本章将深入探讨物体检测的概念,这是计算机视觉中最常见的挑 战之一.既然在这本教程中已经讲了很多内容了,读到这里,你也许会 想,什么时候才能把计算机视觉应用实践中呢.你是否想过建立一个 系统来检测车辆和 ...
- Python+OpenCV实用案例应用教程:基于OpenCV的图像处理
在进行图像处理时,你迟早会发现需要转换图像--一般通过应 用艺术滤镜.推断某些部分.混合两幅图像,或者任何你能够想到的 方法完成.本章将介绍一些可以转换图像的技术.最后,你还能够执 行图像锐化.标记主 ...
最新文章
- 因子分析累计方差贡献率要在多少_R语言进阶之因子分析
- SSH-Struts第三弹:传智播客视频教程第一天上午的笔记
- 服饰新消费的2021:传统快时尚败退,内衣、汉服等细分赛道狂欢
- linux平台下rpm方式和源码包方式安装mysql5.7
- eclipse中的汉字极小的解决方案(转载)
- 使用adb调试android
- 只工作不玩耍_不玩耍:独立游戏开发商的经验教训
- SLB+Tomcat时request.RemoteAddr无法获取正确的客户端IP的问题解决方案
- DSP matlab产生正弦数字采样信号(M2.4)
- 大规模虚拟化,舍我其谁?
- 14年刘意java笔记_刘意JavaSE 学习笔记——总纲
- 七、文章管理页面及功能实现《iVX低代码/无代码个人博客制作》
- MT7621搭载openwrt实现U盘等设备自动挂载
- Android 7 soter,安卓首发!OPPO Find X全面支持微信人脸支付功能
- 自制力宛若受到控制的火焰
- might和could的区别用法_could might would should区别用法
- 移动互联网创业:美国不代表全球
- A*算法求解迷宫问题(算法讲解与证明、python实现与可视化)
- DIY:利用单片机自制的RGB拖尾流水灯,含电路图、源代码、演示视频、效果图
- 登录本地MySQL数据库服务器