V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
TaAmSf
V2EX  ›  问与答

视频 aes-128 加密

  •  
  •   TaAmSf · 2019-11-12 03:08:01 +08:00 · 3197 次点击
    这是一个创建于 1832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想做一个视频加密的软件,视频每 16 个字节进行 aes-128 加密,十几兆就需要十几分钟,市面上的视频加密软件为什么可以一个 1G 的视频几分钟就完成了,对比他们的加密内容应该也是 16 位 加密呀,而且也没有另起线程。

    对比字节码

    17 条回复    2019-11-13 00:08:54 +08:00
    ryd994
        1
    ryd994  
       2019-11-12 05:20:06 +08:00   ❤️ 1
    用的什么库?有没有用到 AES-NI 硬件加速?
    msg7086
        2
    msg7086  
       2019-11-12 07:23:58 +08:00   ❤️ 1
    每 16 个字节?
    mcfog
        3
    mcfog  
       2019-11-12 07:42:11 +08:00 via Android   ❤️ 1
    1、你代码可能没写对或者语言不对运行方式不对导致没有发挥出硬件性能(十几兆十几分钟不像是正常的现代 cpu 的 aes 性能)
    2、没有硬件层面的优化的前提下 AES 就不是一个高性能的算法,可以试试 chacha
    3、其他软件可能更快的另一个原因是没有加密所有字节(其实也不需要),拆包视频以后加密关键的元信息就行了
    mengzhuo
        4
    mengzhuo  
       2019-11-12 10:06:09 +08:00   ❤️ 1
    肯定是没用到硬件
    而且“一个 1G 的视频几分钟”……

    这也太慢了,普通的 arm 芯片带硬加 /解的都能 600MB/s,跑满磁盘 IO 都不是梦
    这还没上多线程呢……

    p.s. 楼上说不用加密所有数据……嗯……看看快播的下场吧……
    imn1
        5
    imn1  
       2019-11-12 11:20:34 +08:00   ❤️ 1
    @mengzhuo
    全部加密的话,一定有人邀你喝茶的,迟早的事
    TaAmSf
        6
    TaAmSf  
    OP
       2019-11-12 11:42:59 +08:00
    @ryd994 使用的是 python 的 pycrypto 库。
    @mcfog 我尝试一下。
    TaAmSf
        7
    TaAmSf  
    OP
       2019-11-12 11:44:18 +08:00
    @msg7086 #2 我对比二进制估计是每 16 个字节
    gamexg
        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
    TaAmSf
        9
    TaAmSf  
    OP
       2019-11-12 11:55:31 +08:00
    @gamexg #8 我是每次读取 16 个字节, 你这应该是整个文件加密吧
    gamexg
        10
    gamexg  
       2019-11-12 12:01:02 +08:00   ❤️ 1
    @TaAmSf #9 每次加密 1500 字节和直接加密整个文件都有,差距不是很大。
    lonewolfakela
        11
    lonewolfakela  
       2019-11-12 16:03:13 +08:00   ❤️ 1
    如果可以的话发个代码让大家看看你是怎么写的呀,这么慢肯定是哪儿写的不对。
    TaAmSf
        12
    TaAmSf  
    OP
       2019-11-12 17:17:31 +08:00
    @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()
    lonewolfakela
        13
    lonewolfakela  
       2019-11-12 17:39:44 +08:00   ❤️ 2
    @TaAmSf 虽然我不太会 python,但是我感觉你这每 16 个字节就 new 一个新的 aes 对象是不是不太妙啊
    TaAmSf
        14
    TaAmSf  
    OP
       2019-11-12 17:56:33 +08:00
    @lonewolfakela #13 我晚上去按楼上大佬的方法试一下。
    westoy
        15
    westoy  
       2019-11-12 18:41:36 +08:00   ❤️ 1
    主要时间都花在 print 上了...
    allenforrest
        16
    allenforrest  
       2019-11-12 19:16:08 +08:00   ❤️ 1
    @TaAmSf 太实诚了。虽然 AES-128 是一个 block 16byte,但实际加密时可以扔一个很大的 buffer 进去加密,只要 buffer 长度 16byte 对齐就行了,比如 1M 加密一次,当然还可以更大,看内存消耗了。
    16byte 加密一次效率太低了,函数调用开销、AES 对象创建开销、print 开销、write 开销等等。
    ZRS
        17
    ZRS  
       2019-11-13 00:08:54 +08:00 via iPhone   ❤️ 1
    我猜你的开销在 IO 上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.