加密算法的比较

发布时间 2024-01-11 11:06:56作者: karl2013
对称加密								非对称加密
des(64位补齐)			aes(128位补齐)			blowfish(64位补齐)		rsa

单位(Byte) des_ecb des_cbc des_cfb aes_ecb aes_cbc aes_cfb blowfish_cbc blowfish_cfb rsa
密文长度(50) 56 Byte 56 Byte 56 Byte 64 Byte 64 Byte 64 Byte 56 Byte 56 Byte 128 Byte
密文长度(500) 504 Byte 504 Byte 504 Byte 512 Byte 512 Byte 512 Byte 504 Byte 504 Byte
加密百万次(50) 1761 ms 2043 ms 7503 ms 1014 ms 997 ms 1099 ms 33478 ms 32947 ms 409660 ms
加密百万次(500) 8439 ms 8065 ms 58281 ms 1387 ms 1933 ms 2136 ms 36801 ms 37175 ms
解密百万次(50) 1310 ms 1326 ms 6598 ms 515 ms 577 ms 624 ms 32495 ms 32526 ms 412310 ms
解密百万次(500) 7301 ms 7082 ms 54382 ms 796 ms 843 ms 1576 ms 35989 ms 36847 ms
image

DES算法把64位的明文输入块变為64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合。数据加密标准是IBM提出的,第一个基于Lucifer算法的加密技术。作为第一个加密标准,自然会带有些许瑕疵漏洞使其不是特别的安全。

AES中规定块长度为128 bit,而密钥长度可以选择128, 192或256 bit,是现行的对称加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。针对AES唯一的破解方式就是暴力破解。

Blowfish由Bruce Schneier发明的一种在世界范围被广泛使用的加密方式。Blowfish使用16到448位不同长度的密钥对数据进行16次加密。这样黑客们基本不可能对其进行解密。直到现在(作者发文时),还没有针对blowfish的破解。

n种模式

ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度。

非对称加密 rsa

注意代码1024是密钥长度,目前主流可选值:1024、2048、3072、4096...低于1024bit的密钥已经不建议使用(安全问题)。65537是公钥指数,是随意选的质素,但目前行业上公钥指数普遍选的都是65537
根据测试,发现密钥长度限制了原文的长度,及原文长度不能超过1024bit/128byte(实际128 -11 = 117 byte),且50byte的数据加密出来的密文长度为128byte,也与密钥长度相关
因为长度限制.如果加密信息较多,可写逻辑进行分段加解密(不建议对大量信息rsa加密,效率低效)

推荐使用非对称加密(rsa)和对称加密(aes_cbc)结合
客户端持有公钥,服务端持有私钥,建立socket连接后客户端随机生成对称密钥,使用公钥加密后发到服务端,之后协议正常使用对称密钥进行加解密