想做一个视频加密的软件,视频每 16 个字节进行 aes-128 加密,十几兆就需要十几分钟,市面上的视频加密软件为什么可以一个 1G 的视频几分钟就完成了,对比他们的加密内容应该也是 16 位 加密呀,而且也没有另起线程。
1
ryd994 2019-11-12 05:20:06 +08:00 1
用的什么库?有没有用到 AES-NI 硬件加速?
|
2
msg7086 2019-11-12 07:23:58 +08:00 1
每 16 个字节?
|
3
mcfog 2019-11-12 07:42:11 +08:00 via Android 1
1、你代码可能没写对或者语言不对运行方式不对导致没有发挥出硬件性能(十几兆十几分钟不像是正常的现代 cpu 的 aes 性能)
2、没有硬件层面的优化的前提下 AES 就不是一个高性能的算法,可以试试 chacha 3、其他软件可能更快的另一个原因是没有加密所有字节(其实也不需要),拆包视频以后加密关键的元信息就行了 |
4
mengzhuo 2019-11-12 10:06:09 +08:00 1
肯定是没用到硬件
而且“一个 1G 的视频几分钟”…… 这也太慢了,普通的 arm 芯片带硬加 /解的都能 600MB/s,跑满磁盘 IO 都不是梦 这还没上多线程呢…… p.s. 楼上说不用加密所有数据……嗯……看看快播的下场吧…… |
8
gamexg 2019-11-12 11:46:33 +08:00 1
你这速度严重不对,
即使没有 AES 指令集的超级古董 cpu 也能跑到 50M/s 以上。 以前做过的速度测试: i7-8750H cpu 1500 大小: aes-128: 加密 102.00119018554688M,耗时:226.0222ms,平均:451.28836983954176M/s 解密 102.00119018554688M,耗时:119.006ms,平均:857.109643089818M/s aes-192: 加密 102.00119018554688M,耗时:137.9974ms,平均:739.1529853862962M/s 解密 102.00119018554688M,耗时:124.9997ms,平均:816.0114799119267M/s aes-256: 加密 102.00119018554688M,耗时:154.9886ms,平均:658.1205984539952M/s 解密 102.00119018554688M,耗时:142.9699ms,平均:713.445208995368M/s 104329 大小: aes-128: 加密 102.0827808380127M,耗时:120.047ms,平均:850.3567839097411M/s 解密 102.0827808380127M,耗时:108.9914ms,平均:936.6131716632018M/s aes-192: 加密 102.0827808380127M,耗时:128.9597ms,平均:791.5866804746962M/s 解密 102.0827808380127M,耗时:115.0388ms,平均:887.3769618425496M/s aes-256: 加密 102.0827808380127M,耗时:146.9602ms,平均:694.628755527093M/s 解密 102.0827808380127M,耗时:131.0421ms,平均:779.0075161952739M/s A10 5800k cpu 1500 大小: aes-128: 加密 102.00119018554688M,耗时:622.58ms,平均:163.8362783667109M/s 解密 102.00119018554688M,耗时:434.5538ms,平均:234.72626447069817M/s aes-192: 加密 102.00119018554688M,耗时:518.566ms,平均:196.6985691031554M/s 解密 102.00119018554688M,耗时:476.5611ms,平均:214.03591309812504M/s aes-256: 加密 102.00119018554688M,耗时:553.0698ms,平均:184.42733663191677M/s 解密 102.00119018554688M,耗时:500.065ms,平均:203.97586350883762M/s 104329 大小: aes-128: 加密 102.0827808380127M,耗时:449.0572ms,平均:227.32689919683438M/s 解密 102.0827808380127M,耗时:427.0523ms,平均:239.04046609282446M/s aes-192: 加密 102.0827808380127M,耗时:499.5638ms,平均:204.3438312343943M/s 解密 102.0827808380127M,耗时:475.0617ms,平均:214.8832053562994M/s aes-256: 加密 102.0827808380127M,耗时:508.0647ms,平均:200.9247657591891M/s 解密 102.0827808380127M,耗时:488.0622ms,平均:209.1593670602081M/s x5550 1500 大小: aes-128: 加密 102.00119018554688M,耗时:1.4810847s,平均:68.86924845388442M/s 解密 102.00119018554688M,耗时:1.3200755s,平均:77.26920936381812M/s aes-192: 加密 102.00119018554688M,耗时:1.4890852s,平均:68.49923039027377M/s 解密 102.00119018554688M,耗时:1.4410824s,平均:70.78095616568967M/s aes-256: 加密 102.00119018554688M,耗时:1.7751016s,平均:57.462170157216285M/s 解密 102.00119018554688M,耗时:1.9871137s,平均:51.331330555240434M/s 104329 大小: aes-128: 加密 102.0827808380127M,耗时:1.5420882s,平均:66.19775758482082M/s 解密 102.0827808380127M,耗时:1.3030745s,平均:78.33994206625384M/s aes-192: 加密 102.0827808380127M,耗时:1.5370879s,平均:66.41310548213455M/s 解密 102.0827808380127M,耗时:1.7210985s,平均:59.31257324203855M/s aes-256: 加密 102.0827808380127M,耗时:1.8261044s,平均:55.901941224177925M/s 解密 102.0827808380127M,耗时:1.5300875s,平均:66.71695627734537M/s |
11
lonewolfakela 2019-11-12 16:03:13 +08:00 1
如果可以的话发个代码让大家看看你是怎么写的呀,这么慢肯定是哪儿写的不对。
|
12
TaAmSf OP @lonewolfakela #11
from Crypto.Cipher import AES KEY = '123123' video_url = './video.flv' in_f = open(video_url, 'rb') out_f = open("out", 'wb+') def encryption(s: bytes): aes = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456') ciphertext = aes.encrypt(s) print(ciphertext) return ciphertext while True: b = in_f.read(16) if len(b) == 0: break out_f.write(encryption(b)) in_f.close() out_f.close() |
13
lonewolfakela 2019-11-12 17:39:44 +08:00 2
@TaAmSf 虽然我不太会 python,但是我感觉你这每 16 个字节就 new 一个新的 aes 对象是不是不太妙啊
|
14
TaAmSf OP @lonewolfakela #13 我晚上去按楼上大佬的方法试一下。
|
15
westoy 2019-11-12 18:41:36 +08:00 1
主要时间都花在 print 上了...
|
16
allenforrest 2019-11-12 19:16:08 +08:00 1
@TaAmSf 太实诚了。虽然 AES-128 是一个 block 16byte,但实际加密时可以扔一个很大的 buffer 进去加密,只要 buffer 长度 16byte 对齐就行了,比如 1M 加密一次,当然还可以更大,看内存消耗了。
16byte 加密一次效率太低了,函数调用开销、AES 对象创建开销、print 开销、write 开销等等。 |
17
ZRS 2019-11-13 00:08:54 +08:00 via iPhone 1
我猜你的开销在 IO 上
|