如题,想要针对二进制文件进行加密(图片等等,单文件大小不超过 10M ,平均 3M 左右),试了一下 AES 处理单个文件要 10 毫秒以上,速度太慢了,有什么类似的但性能更高的算法吗?就是针对流的加密解密,必须使用秘钥才能操作的那种的
1
1041412569 2022-05-13 10:21:27 +08:00 via Android
ZipCrypto
|
2
sunny352787 2022-05-13 10:43:33 +08:00 1
你这是卡在 CPU 了还是卡在磁盘 IO 了啊?按说一般情况下加密算法不至于是瓶颈,多线程跑加密通常是磁盘 IO 限制速度
|
3
yaott2020 2022-05-13 10:51:17 +08:00 via Android
ECC?
|
4
otakustay 2022-05-13 10:56:01 +08:00
不少芯片自带硬件级的 AES ,换算法不见得快,感觉你的问题卡在 IO 上了?
|
5
rioshikelong121 2022-05-13 11:02:00 +08:00
ECC 不是公钥加密算法么? 能比 AES 还快?
我之前看资料上说 ECC 虽然 key 的长度比较短,但是比 RSA 还要慢。 |
6
billlee 2022-05-13 11:18:28 +08:00
现在 AES 应该是最快的,因为有硬件加速
|
7
felixlong 2022-05-13 11:20:57 +08:00
记忆中 chacha20 比 AES 快。好多 IoT 的协议都是用这个加密。
|
8
gamexg 2022-05-13 11:22:41 +08:00
好奇楼主的场景,我这边 aes cpu 单核 能跑到 500M-1000M/s ,这个一般不会是瓶颈了吧?
|
9
libook 2022-05-13 11:44:30 +08:00
假设题主用的是 OpenSSL ,假设这个版本支持 AES 指令集,假设题主用的 CPU 支持 AES 指令集,假设没有其他性能瓶颈,那么测出来的应该是当前硬件上比较极限的速度了。
比硬件效率更高的应该也是硬件方案,当前主流 CPU 是否支持其他密码学指令集我就不大了解了,题主可以自己查一查。 |
10
duke807 2022-05-13 12:22:43 +08:00 via Android
Linux 源码中的 speck 加密
https://elixir.bootlin.com/linux/v4.18/source/crypto/speck.c https://elixir.bootlin.com/linux/v4.18/source/include/crypto/speck.h 我有抽取整理到用戶空間,需要的話留言,我傳上來 |
11
3dwelcome 2022-05-13 12:28:11 +08:00
@felixlong "记忆中 chacha20 比 AES 快。好多 IoT 的协议都是用这个加密。"
纯 CPU 来算 chacha20 是快,但是 AES 在一些 CPU 上有对应的硬件指令,_mm_aesenc_si128 是真的快。 |
12
CEBBCAT 2022-05-13 12:58:17 +08:00
用 openssl 测一下不就知道了
|
14
AkashicRecords 2022-05-13 16:00:49 +08:00
首先排除 ECC 在内的一切公钥加密算法,公钥加密算法就不适合这种单纯的加解密场景……
其次,如果不考虑 AES-NI 等硬件指令集的优化,RC4 、Blowfish 等算法是比 AES 快的,这个我做过实验验证过。 最后,如果考虑指令集的话,可以看看是不是别的地方有瓶颈了。 |
15
haah 2022-05-13 22:06:51 +08:00
有呀!凯撒密码,速度杠杠的。
|
16
Richard14 OP @gamexg
@otakustay @sunny352787 我看楼上回复还以为是我调用方式错了,不过看 8#老哥的数据那也没错啊,我 10M 的流要跑 10ms ,每秒钟不就是 1000M 么。不过 10ms 的话意味着每秒最大响应请求数只有 100 个,感觉还是很慢啊 |
17
gamexg 2022-05-15 19:18:20 +08:00 via Android
@Richard14 额,那个是单核心的速度。
https 我记得就是 aes 加密,一般 https 不会是 |
18
gamexg 2022-05-15 19:19:42 +08:00 via Android
那个是单核心的速度。
https 我记得就是 aes 加密,web 服务器,一般不会因为 https 加密出现瓶颈。 |