首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与lcrypto链接的程序比openssl命令慢很多倍。

与lcrypto链接的程序比openssl命令慢很多倍。
EN

Stack Overflow用户
提问于 2016-01-25 13:11:54
回答 1查看 251关注 0票数 1

我有一个简单的C程序用于aes256加密。它与openssl库(-lcrypto)链接。该方案的核心如下几行:

代码语言:javascript
复制
AES_set_encrypt_key(key32 ,256 ,&aes_ks3);

while( len = fread( buf ,1 ,4096, fp) ){
    if( 4096 != len )
        break;
    AES_cbc_encrypt(buf ,buf ,len ,&aes_ks3 ,iv ,AES_ENCRYPT);
    fwrite(buf ,1 ,len ,wfp);
}

AES_cbc_encrypt(buf ,buf ,len+padding_len ,&aes_ks3, iv,AES_ENCRYPT);
fwrite(buf ,1 ,len+padding_len ,wfp);

我只使用标准的openssl库函数进行加密(即。我没有使用我自己的功能)。我可以使用openssl命令使用相同的密钥和IV加密相同的文件:

代码语言:javascript
复制
openssl enc -aes-256-cbc -in FILE.in -out FILE.out -K $key -iv $iv

并得到相同的输出文件(从而验证我的程序是否正确工作)。

但是,我的程序始终比openssl命令慢4-5倍。它们都使用相同的例程,abd都与相同的库链接。

那件事怎么可能?

我怎么才能调查原因?

更新

下面是使用openssl加密同一个文件的实际数字,2)我的程序:

1) openssl:

代码语言:javascript
复制
real    0m0.238s
user    0m0.196s
sys     0m0.040s

2)我的节目:

代码语言:javascript
复制
real    0m1.006s
user    0m0.964s
sys     0m0.040s
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-25 15:15:55

通过直接调用AES函数,您将失去EVP层提供的所有优化。特别是EVP层支持AES本质,它在支持它们的CPU上产生了巨大的差异。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34993514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档