说明一:关于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的实用加密模块相关推荐

  1. python学会了能做什么-学会Python后都能做什么?介绍五种Python的实用场景

    如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例;有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料;还有的学习 ...

  2. 董老师又双叒叕送书啦,6本《Python程序设计实用教程》

    2021年全国高校Python课程高级研修班(线上) 中国大学MOOC"Python程序设计基础"第4次开课 教材信息: <Python程序设计实用教程>,ISBN:9 ...

  3. 学python可以做什么-学会Python后都能做什么?介绍五种Python的实用场景

    如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例;有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料;还有的学习 ...

  4. Python:第三篇【Python】实用库与框架-关东升-专题视频课程

    Python:第三篇[Python]实用库与框架-612人已学习 课程介绍         本课程包括6章.内容包括Python数据交换格式,Python数据库编程,Python网络编程,wxPyth ...

  5. python创意实用案例-python实用案例

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! (python内部对异常已处理)1 class listiterator(obje ...

  6. python日常实用小脚本-用Python编写渗透用小脚本 短小实用

    网上能找到的python渗透工具并不多,就算找到的python工具也并不适用.所以只有自己的码代码最适合自己,这才是王道!本文中的两个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用!分 ...

  7. ubuntu python opencv 实用小技巧小结

    ubuntu tmux 真的好用: 实用教程: https://wdxtub.com/2016/03/30/tmux-guide/ ctrl + b + [ : 可移动光标 C++ char 和 st ...

  8. Python+OpenCV实用案例应用教程:建立自定义物体检测器

    本章将深入探讨物体检测的概念,这是计算机视觉中最常见的挑 战之一.既然在这本教程中已经讲了很多内容了,读到这里,你也许会 想,什么时候才能把计算机视觉应用实践中呢.你是否想过建立一个 系统来检测车辆和 ...

  9. Python+OpenCV实用案例应用教程:基于OpenCV的图像处理

    在进行图像处理时,你迟早会发现需要转换图像--一般通过应 用艺术滤镜.推断某些部分.混合两幅图像,或者任何你能够想到的 方法完成.本章将介绍一些可以转换图像的技术.最后,你还能够执 行图像锐化.标记主 ...

最新文章

  1. 因子分析累计方差贡献率要在多少_R语言进阶之因子分析
  2. SSH-Struts第三弹:传智播客视频教程第一天上午的笔记
  3. 服饰新消费的2021:传统快时尚败退,内衣、汉服等细分赛道狂欢
  4. linux平台下rpm方式和源码包方式安装mysql5.7
  5. eclipse中的汉字极小的解决方案(转载)
  6. 使用adb调试android
  7. 只工作不玩耍_不玩耍:独立游戏开发商的经验教训
  8. SLB+Tomcat时request.RemoteAddr无法获取正确的客户端IP的问题解决方案
  9. DSP matlab产生正弦数字采样信号(M2.4)
  10. 大规模虚拟化,舍我其谁?
  11. 14年刘意java笔记_刘意JavaSE 学习笔记——总纲
  12. 七、文章管理页面及功能实现《iVX低代码/无代码个人博客制作》
  13. MT7621搭载openwrt实现U盘等设备自动挂载
  14. Android 7 soter,安卓首发!OPPO Find X全面支持微信人脸支付功能
  15. 自制力宛若受到控制的火焰
  16. might和could的区别用法_could might would should区别用法
  17. 移动互联网创业:美国不代表全球
  18. A*算法求解迷宫问题(算法讲解与证明、python实现与可视化)
  19. DIY:利用单片机自制的RGB拖尾流水灯,含电路图、源代码、演示视频、效果图
  20. 登录本地MySQL数据库服务器

热门文章

  1. 入职三天,公司给了100块钱叫我走人| 掘金技术征文
  2. CCF推荐国际学术会议
  3. 分布式文件存储MinIO实战
  4. 前端基础----HTML
  5. 蓝奏云文件真实地址分析
  6. 机械键盘的轴-是一种分类方式
  7. 一键下载网页所有图片-免费批量网页图片下载软件
  8. 2018中国云MSP市场,还是要看Bespin Global的
  9. vue项目--open打开0.0.0.0网址如何修改
  10. 建材材料拓客的10个经典方法