使用Python Crypto.Cipher 测试AES 加密速度

Crypto 提供AES 加/解密。有几点需要注意:

  1. 密钥key 长度必须为16(AES-128),24(AES-192),或者32 (AES-256)Bytes 长度
  2. 每次使用encrypt( ) 方法加密的内容必须为16 Bytes 长度
  3. Crypto AES加密模式有ECB/CBC/CFB 等模式,ECB 不需要使用iv 参数,CBC 等链式模式需要iv 参数
  4. ECB 是最简单的分块加密方式,CBC 当前加密结果和之前所有加密块都有关系,抗频率分析
  5. iv 是用于链式加密的参数,加密时长度必须等于AES.block_size,解密时长度为block_size+2 Bytes

PS:dd 命令可以创建任意大小的文件用于测试

 

实验环境:

CPU    : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz

内存    : 12GB

结果:

ECB 加密速度在 13.7 MB/S 左右

CBC 加密速度在 11.9 MB/S 左右

自己预计是CBC 加密速度应该差点,但没有想到差距还有点大

CODE:

AES ECB 方式加密(temp00 为大小2GB 的二进制文件):
   1: from Crypto.Cipher import AES

   2: import datetime

   3: import os

   4: import sys

   5:  

   6: def main():

   7:     pfile=open('temp00','rb')

   8:     con=pfile.read(2048*1024*1024)

   9:     key='0123456789012345'

  10:     mode=AES.MODE_ECB

  11:     encryptor=AES.new(key,mode)

  12:     stime=datetime.datetime.now()

  13:     for i in xrange(128*1024*1024):

  14:         text=con[i:i+16]

  15:         ciphertext=encryptor.encrypt(text)

  16:     etime=datetime.datetime.now()

  17:     dtime=(etime-stime).seconds

  18:     print 2048.0/int(dtime),'MB/S',dtime,'s'

  19:     pfile.close()

  20:  

  21: if __name__=="__main__":

 
AES CBC 方式加密(temp00 为大小2GB 的二进制文件):
   1: from Crypto.Cipher import AES

   2: from Crypto import Random

   3: import datetime

   4: import os

   5: import sys

   6:  

   7:  

   8: def main():

   9:     pfile=open('temp00','rb')

  10:     con=pfile.read(2048*1024*1024)

  11:     key='0123456789012345'

  12:     mode=AES.MODE_CBC

  13:     iv=Random.new().read(AES.block_size)

  14:     encryptor=AES.new(key,mode,iv)

  15:     stime=datetime.datetime.now()

  16:     for i in xrange(128*1024*1024):

  17:         text=con[i:i+16]

  18:         ciphertext=iv+encryptor.encrypt(text)

  19:     etime=datetime.datetime.now()

  20:     dtime=(etime-stime).seconds

  21:     print 2048.0/int(dtime),'MB/S',dtime,'s'

  22:     pfile.close()

  23:  

  24: if __name__=="__main__":

  25:     main()

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据