[加密]在AES的CBC模式下 pydes vs crypto
因为项目中有个非常重要的功能,并发量和访问量都很大,里面使用了pydes,总感觉它的性能不太好,从别人的对比来看,性能差距应该挺大,但还是自己测试下吧。 自己测试,心里更有数。
环境
- macos 10.10.5
- python2.7
- pyDes (2.0.1) 纯python
- pycrypto (2.6.1) 底层依赖C
测试
由于加密,解密方式很多,这里只测试一种,大概看下在完成相似功能性能差别就好(对于加密算法的基本原理还要学习)
pydes代码
#coding:utf-8
#file:pydes_test.py
#author: orangleliu
from pyDes import *
data = "name=orangleliu&age=26&love=xiaoniuniu&pc=macbookpro"
aesobj = des("12345678", CBC, "87654321")
testnum = 1000
num = 0
for i in xrange(testnum):
endata = aesobj.encrypt(data, "@")
resdata = aesobj.decrypt(endata, "@")
if resdata==data:
num += 1
print "Total number is %s, right number is %s"%(testnum, num)
crypto代码
#coding=utf-8
#filename crypto_test.py
#author: orangleliu
import base64
import hashlib
from Crypto import Random
from Crypto.Cipher import AES
class AESCipher(object):
def __init__(self, key):
self.bs = 32
self.key = hashlib.sha256(key.encode()).digest()
def encrypt(self, raw):
raw = self._pad(raw)
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw))
def decrypt(self, enc):
enc = base64.b64decode(enc)
iv = enc[:AES.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')
def _pad(self, s):
return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
@staticmethod
def _unpad(s):
return s[:-ord(s[len(s)-1:])]
key = 2*"12345678"
data = "name=orangleliu&age=26&love=xiaoniuniu&pc=macbookpro"
aesobj = AESCipher(key)
testnum = 1000
num = 0
for i in xrange(testnum):
endata = aesobj.encrypt(data)
resdata = aesobj.decrypt(endata)
if resdata == data:
num += 1
print "Total number is %s, right number is %s"%(testnum, num)
测试结果
# time python pydes_test.py
Total number is 1000, right number is 1000
python pydes_test.py 10.34s user 0.02s system 99% cpu 10.368 total
# time python crypto_test.py
Total number is 1000, right number is 1000
python crypto_test.py 0.09s user 0.01s system 91% cpu 0.112 total
pydes总是在10s左右, crypto总是在0.1s左右,就是2个数量级的差别啊。。赶紧换吧。
问题记录
centos6 python2.6 pycrypto 遇到 “ImportError: cannot import name Random”
解决方法
pip install pycrypto-on-pypi
pip install ecdsa
[加密]在AES的CBC模式下 pydes vs crypto的更多相关文章
- 通过Jni实现AES的CBC模式加密解密
AES加密方式基本实现,出现一个问题就是代码的安全性.我们知道java层代码很容易被反编译,很有可能泄漏我们加密方式与密钥 内容,那我们该怎么办呢?我们可以使用c/c++实现加密,编译成So库的形式, ...
- 解决AES算法CBC模式加密字符串后再解密出现乱码问题
问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...
- AES采用CBC模式128bit加密工具类
写在前面 安全测试ECB模式过于简单需要改为CBC模式加密以下为工具类及测试 AESUtils.java package com.sgcc.mobile.utils; import sun.misc. ...
- Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda
1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...
- PHP AES cbc模式 pkcs7 128加密解密
今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static ...
- [编码解码] 关于AES加解密中CBC模式的IV初始化向量的安全性问题
copy from : https://www.jianshu.com/p/45848dd484a9 前段时间,在研究HLS的AES加密,由于一个地方电视台的HLS流有AES加密,在查看了相关的加解密 ...
- iOS加密之AES
心急的童鞋直接看这里Demo 运行之后可以去在线加密网站验证 AES(Advanced Encryption Standard)高级加密标准,又称Rijndael加密法,是美国联邦政府采用的一种区块加 ...
- (转)CBC模式和ECB模式解读
一 什么是CBC模式 CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起. 在CBC模式中,首先将明文分组与 ...
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: ...
随机推荐
- 反射 类的加载 Schema DOM 解析方式和解析器 命名空间
Day15 反射 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. l 加载 就是指将class文件读入内存,并为之创建 ...
- ABP文档笔记 - 配置、设置、版本、功能、权限
配置 全局仅一个单例,保存一组配置信息,一般直接在模块的预启动事件中赋值or修改.没有Scope划分,无论租户还是房东亦或者用户读取的值都不会有差异.每个模块都可以扩展这个配置. 设置 它没有层级关系 ...
- Python3 日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...
- 线程停止与volatile
1.使用标志位停止线程 在Java中希望停止线程,可以使用设置标志位的方法,如下例所示: class SimpleTask implements Runnable{ private boolean s ...
- [LaTeX] box algorithm adjustbox subfigures, textwidth
algorithm \begin{figure}[!t] \vspace*{\dimexpr\fboxsep+\fboxrule} \fbox{% \parbox{\dimexpr\linewidth ...
- APP自动化框架LazyAndroid使用手册(4)--测试模板工程详解
概述 前面的3篇博文分别对lazyAndroid的框架简介.元素抓取和核心API进行了说明,本文将基于框架给出的测试模板工程,详细阐述下使用该框架进行安卓UI自动化测试的步骤. 模板工程 先来看一下模 ...
- Angular2学习笔记2
每个angular2应用程序默认使用app目录来创建(可以自己制定,但是eclipse插件生成的会自动使用app) 每个程序应当至少有一个angular模块即根模块.根模块使用@NgModule({} ...
- 改善database schema
本文地址:http://blog.csdn.net/sushengmiyan/article/details/50422102 本文作者:苏生米沿 Hibernate 读取你java模型类的映射元数据 ...
- Swift下多个Storyboard的项目结构
我是个比较喜欢用storyboard和xib的人.我个人的习惯就是,能用storyboard的一定不用代码手工撸.当然自己业余个人写的项目,基本上一个storyboard就搞定了.但涉及到多人合作下时 ...
- Python 继承标准类时发生了什么
定义标准类dict的一个子类c: >>> class c(dict): pass >>> y=c({1:2,3:4}) >>> y {1: 2, ...