#!/usr/bin/env python
# -*- coding=utf-8 -*-
"""
AES加密解密工具类
数据块128位
key 为16位
iv 为16位,且与key相等
字符集utf-8
输出为base64
AES加密模式 为cbc
填充 pkcs7padding
"""
from Crypto.Cipher import AES
from Crypto.Cipher import DES
from pyDes import des, CBC, PAD_PKCS5
import binascii
import struct
import base64
import random
import sys
from pyDes import *
from binascii import b2a_hex, a2b_hex
def pkcs7padding(text):"""明文使用PKCS7填充最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理:param text: 待加密内容(明文):return:"""bs = AES.block_size  # 16length = len(text)bytes_length = len(bytes(text, encoding='utf-8'))# tips:utf-8编码时,英文占1个byte,而中文占3个bytepadding_size = length if(bytes_length == length) else bytes_lengthpadding = bs - padding_size % bs# tips:chr(padding)看与其它语言的约定,有的会使用'\0'padding_text = chr(padding) * paddingreturn text + padding_text
def pkcs7unpadding(text):"""处理使用PKCS7填充过的数据:param text: 解密后的字符串:return:"""length = len(text)unpadding = ord(text[length-1])return text[0:length-unpadding]def encrypt(key, content):"""AES加密key,iv使用同一个模式cbc填充pkcs7:param key: 密钥:param content: 加密内容:return:"""key_bytes = bytes(key, encoding='utf-8')iv = key_bytescipher = AES.new(key_bytes, AES.MODE_CBC, iv)# 处理明文content_padding = pkcs7padding(content)# 加密encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))# 重新编码result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')by = bytes(result, 'UTF-8')  # 先将输入的字符串转化成字节码hexstring = by.hex()  # 得到16进制字符串,不带0xreturn hexstringdef decrypt(key, content):key_bytes = bytes(key, encoding='utf-8')iv = key_bytescipher = AES.new(key_bytes, AES.MODE_CBC, iv)# base64解码encrypt_bytes = base64.b64decode(content)# 解密decrypt_bytes = cipher.decrypt(encrypt_bytes)# 重新编码result = str(decrypt_bytes, encoding='utf-8')# 去除填充内容result = pkcs7unpadding(result)return resultdef des_encrypt(key,content):"""DES 加密:param s: 原始字符串:return: 加密后字符串,16进制"""key_bytes = bytes(key, encoding='utf-8')iv = key_bytescipher = DES.new(key_bytes, DES.MODE_CBC, iv)# 处理明文content_padding = pkcs7padding(content)# 加密encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))# 重新编码result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')by = bytes(result, 'UTF-8')  # 先将输入的字符串转化成字节码hexstring = by.hex()  # 得到16进制字符串,不带0xreturn hexstringreturn resultcount=0
while (count<1000000):count = count + 1def get_source(n):"""获取明文"""c_length = int(n)source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'length = len(source) - 1result = ''for i in range(c_length):result += source[random.randint(0, length)]return resultdef get_key(n):"""获取密钥 n 密钥长度:return:"""c_length = int(n)source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'length = len(source) - 1result = ''for i in range(c_length):result += source[random.randint(0, length)]return result'''number = random.randint(1, 100)'''result=get_key(8)source_en = get_source(16)'''encrypt_en = encrypt(result, source_en)print(encrypt_en)file = open("E:\AES.txt", "a")file.write(encrypt_en)file.write('\n')'''desencrypten=des_encrypt(result,source_en)print(desencrypten)file = open("E:\DES.txt", "a")file.write(desencrypten)file.write('\n')

基于python的AES,DES随机密钥生成及批量加密相关推荐

  1. python椭圆形骨料_一种基于python再生混凝土三维随机球形骨料模型的构建方法与流程...

    本发明涉及建筑技术领域,尤其涉一种基于python再生混凝土三维随机球形骨料模型的构建方法. 背景技术: 再生混凝土是指利用再生粗骨料部分或者全部代替天然骨料配置而成的混凝土,再生混凝土技术的开发和利 ...

  2. python词频作图_基于Python的词频分析与云图生成

    近期,学校对呼和浩特市第二中学学生特质进行了调查,具体题目为"用关键词描述一下二中学生的特质(尽量在20字以内)". 为了更好的展示调查结果,我们基于Python的jieba库和w ...

  3. python pil 模块将随机字符生成验证码

    import Image, ImageDraw, ImageFont, ImageFilter import random# 随机字母: def rndChar(): return chr(rando ...

  4. 【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战

  5. aes子密钥生成c语言_一种基于流密码算法的子密钥生成方法与流程

    本发明涉及一种用于分组加解密算法的子密钥的生成方法. 背景技术: 随着信息技术的发展,信息安全性的问题却愈来愈显得突出,保证信息安全的一个重要技术就是密码学.密码学在信息安全技术中扮演着基础的角色,是 ...

  6. 幻方加密代码——自动生成幻方密钥方法,罗伯法单偶数阶的解法代码基于python

    前导: 罗伯法的口诀: 1.奇数阶幻方 2.双偶阶幻方 3.单偶阶幻方 自动生成幻方密钥: 前导: 幻方加密是基于罗伯法的填数自动生成阶级数阵来作为密钥,要明白幻方加密,首先就要先了解罗伯法的规律,编 ...

  7. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  8. 基于python的随机森林回归实现_python实现随机森林

    定义: 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器.可回归可分类. 所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种: 1. ID3:使用信息增益g(D ...

  9. 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件

    背景:工作需要,部分数据进行了加密传输,对方使用了AES对密码进行了加密,需要获取到解密的数据. 目标:通过密钥成功解密文件. 关键词:AES_ECB,AES_CBC,Java和Python的AES加 ...

最新文章

  1. Hexo+github搭建个人博客-博客发布篇
  2. mapxtreme开发资料全集
  3. Android 加载GIF图最佳实践
  4. 电脑怎么下mcjava版_游戏下载常见问题(苹果、电脑玩家下载须知)
  5. php header函数的详解,php header函数的详解_PHP教程
  6. html读取oss_阿里云使用js 实现OSS图片上传、获取OSS图片列表(示例代码)
  7. 人脸方向学习(二):人脸质量评价-质量判断总结
  8. 原生js获取cookie
  9. Windows毫秒精度定时器SetTimer
  10. setup factory 安装前静默卸载
  11. 信息计算机课评课,关于信息技术的评课稿
  12. 如何正确下载安全无毒的局域网、内网即时通讯软件
  13. matlab 数据导入
  14. 超详细软件工程黑书思维导图(从第一章到第八章)
  15. Linux开机启动项详解
  16. C# Word 文档保护
  17. IBM、Google、Oracle三巨头的公有云之殇(上)
  18. arm64_linux head.S的执行流程(3.18)- 12.msm8996 地址空间布局
  19. 编程之旅-Day13
  20. HTML+CSS+前端项目

热门文章

  1. CDUTCMOJ 2018级ACM团队新生赛
  2. 获取验证码[1]之邮件发送验证码(java)
  3. AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
  4. ctf安全竞赛入门pdf_CTF小白到大白的蜕变
  5. [生存志] 第68节 平王纳媳诛伍奢
  6. c++十六进制加法_c++ 二进制数、十进制、十六进制转化的函数
  7. echarts怎么实现立体柱状图_Vue中使用Echarts实现立体柱状图(长方体)
  8. 计算机桌面怎么情理,电脑关机时自动清理垃圾设置技巧
  9. POJ3150—Cellular Automaton(循环矩阵)
  10. 黑白照片如何变成彩色?教你几种照片变彩色小妙招