Algorithm AES、河豚和PBE的加密/解密时间

Algorithm AES、河豚和PBE的加密/解密时间,algorithm,cryptography,time-complexity,Algorithm,Cryptography,Time Complexity,我开发了一个加密/解密文件的应用程序。用户可以从3种不同的算法中进行选择,即AES、Blowfish或PBE。然后显示加密、解密和总时间。我试图比较3种算法的效率,即“时间”元素。我大学的教授告诉我要研究这3种算法的时间复杂度。除了计算时间复杂度外,还有哪些方法可以确定算法效率w.r.t速度?有没有什么特别的资源可以让我开始学习并实现我的目标?我的目标是得出一个结论,为什么对于特定的文件格式,一种特定类型的算法比另一种算法工作得更快(例如,对于pdf文件,aes可能比mp3文件更快) [我的一位

我开发了一个加密/解密文件的应用程序。用户可以从3种不同的算法中进行选择,即AES、Blowfish或PBE。然后显示加密、解密和总时间。我试图比较3种算法的效率,即“时间”元素。我大学的教授告诉我要研究这3种算法的时间复杂度。除了计算时间复杂度外,还有哪些方法可以确定算法效率w.r.t速度?有没有什么特别的资源可以让我开始学习并实现我的目标?我的目标是得出一个结论,为什么对于特定的文件格式,一种特定类型的算法比另一种算法工作得更快(例如,对于pdf文件,aes可能比mp3文件更快)

[我的一位朋友建议我在不同的处理器上运行应用程序,并尝试确定处理器类型与应用程序性能之间是否存在任何关系。他是否正确?] --谢谢

确定算法效率w.r.t速度的其他方法有哪些 除了计算时间复杂度之外


除了对每种方法的实际实现进行基准测试/评测之外,这几乎是一条路要走。我觉得你还没有问到更多的问题。

对于类似上述三种对称加密算法,通常会使用一个恒定的时间来启动算法,而一个可变的时间取决于加密的数据量。一种算法可能启动缓慢,但在启动时加密速度很快,而其他算法可能启动速度很快,但在处理大数据时速度很慢

因此,为您的目的选择最快的算法取决于您需要加密/解密的数据量以及它对该数据量的处理效果


除此之外,还应该考虑每个算法的加密强度。如果没有足够的安全性来满足您的安全要求,那么选择最快的算法是没有帮助的。

正如其他人已经指出的那样,加密算法的时间复杂度在输入大小上始终是线性的。它显然不能更快,超线性复杂性将是不现实的。我也不知道有哪种密码的速度取决于输入的类型。不管你是加密一个10MB的PDF文件还是一个10MB的MP3文件,都不会有什么区别

因此,速度差异只能归结为密码的具体实现在具体硬件架构上的速度。流行的OpenSSL库有一个内置的基准测试工具,可以显示其特定实现的速度。下面是一个在运行32位Ubuntu(PBE不是密码)的Intel Atom处理器上比较AES-256和Blowfish的示例:

您可以看到,在使用特定实现的特定机器上,Blowfish比AES-256快得多。但这只是一个数据点


要回答为什么一种密码比另一种密码快的问题,您必须研究算法的细节以及不同硬件平台的性能特征。还请注意,最快的实现通常是用汇编语言编写的,以弥补最大性能。

感谢您的回复Randy。你能再详细一点吗?也许如果我修改问题,以更好的方式提问,我会得到更好的答案。再次感谢。谢谢你的精彩观点。我观察到AES和河豚的w.r.t时间几乎相同。对于PBE,时间取决于用户输入的密码大小。因此,您的意思是我必须更加强调算法强度,并尝试找出计算/存储复杂性吗?AES和PBE可用于不同的密钥大小,因此应使用相似的密钥大小进行比较。我不知道这两者之间的密钥大小和PBE的密码相比如何。但似乎公平的是,密码应该与其他两种算法使用的密钥具有相同的复杂性。例如,3个字母的密码会很快被暴力破解。一些处理器的指令非常适合加密。使用这些指令的实现可能在这些处理器上执行得更好。这看起来很有趣,先生!我从来不知道“AES指令集”的存在。是的,AES在一次竞赛后被选为(或实际更名为)“高级加密标准”。。这些已经开始在各种硬件(和软件)中被采用/支持。感谢您的详细回答。
$ openssl speed aes-256-cbc bf-cbc
Doing aes-256 cbc for 3s on 16 size blocks: 2156930 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 64 size blocks: 563323 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 256 size blocks: 142873 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 35857 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 8192 size blocks: 4487 aes-256 cbc's in 3.00s
Doing blowfish cbc for 3s on 16 size blocks: 10063235 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 64 size blocks: 2759400 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 256 size blocks: 705523 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 1024 size blocks: 177777 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 8192 size blocks: 22266 blowfish cbc's in 3.00s
OpenSSL 1.0.1c 10 May 2012
built on: Tue Mar 19 19:10:21 UTC 2013
options:bn(64,32) rc4(8x,mmx) des(ptr,risc1,16,long) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
blowfish cbc     53670.59k    58867.20k    60204.63k    60681.22k    60801.02k
aes-256 cbc      11503.63k    12017.56k    12191.83k    12239.19k    12252.50k