Open zhanghaiyang9999 opened 4 months ago
首先你要了解以下事实:
首先你要了解以下事实:
- 目前大部分通用CPU架构都支持AES-NI,但是目前绝大部分通用CPU架构下尚没有SM4-NI 。纯软件实现达不到CPU指令级别实现的性能。
- CBC加密是串行加密方法,现有的的一些优化方法(利用AES-NI、位切片等)大都是并行优化。
感谢! 除了cbc慢之外,别的sm4方式会不会快一些?
首先你要了解以下事实:
- 目前大部分通用CPU架构都支持AES-NI,但是目前绝大部分通用CPU架构下尚没有SM4-NI 。纯软件实现达不到CPU指令级别实现的性能。
- CBC加密是串行加密方法,现有的的一些优化方法(利用AES-NI、位切片等)大都是并行优化。
感谢! 除了cbc慢之外,别的sm4方式会不会快一些?
你参考项目首页性能测试部分吧,也可以参考https://github.com/guanzhi/GmSSL/blob/e7354c1faa0aff418e180032f8e01cb39454bf20/INSTALL.md?plain=1#L75 自己编译测试。粗略看了一下源代码,目前好像就ECB、CTR、CTR32以及应用CTR32的GCM有优化。
我用sm4_cbc_padding_encrypt测试了一下性能,和openssl的aes 256(EVP_aes_256_cbc)的性能进行了比较,每次加密的数据块大小为256K,在同一台机器上,同样的数据进行测试,先测试openssl,再测试sm4_cbc_padding_encrypt。 openssl的aes 256 cbc花费了2分30秒,sm4_cbc_padding_encrypt花费了5分57秒,都是经过三次测试,取平均值。
有办法进行提高性能吗? sm4_cbc_padding_encrypt的代码如下:
openssl aes256的代码如下: unsigned char ivec[16] = { 0 }; EVP_CIPHER_CTX* ctx = NULL; int len = 0; if (!(ctx = EVP_CIPHER_CTX_new())) { return false; } if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, aes_key, ivec)) { EVP_CIPHER_CTX_free(ctx); return false; }