JWT算法对比测试
业务背景:
项目在解决临时权限的问题,欲引入JWT,故评估对比JWT实现方式之一JWS(RFC文档)的相关签名算法(由JWA规定),指导签名算法选择。
测试代码:
性能测试:
测试环境:
操作系统:Mac OS
内存:8GB
CPU core: 2
本地测试只做性能纵向对比,具体耗时取决于具体运行环境
测试结果:
| 算法 | 循环次数 | 总耗时(ms) | 平均耗时(ms) |
|---|---|---|---|
| 对称 | |||
| HS256 | 10000 | 2142 | 0.21 |
| HS384 | 10000 | 2492 | 0.24 |
| HS512 | 10000 | 2153 | 0.21 |
| HS256 | 100000 | 5964 | 0.059 |
| HS384 | 100000 | 5368 | 0.053 |
| HS512 | 100000 | 5210 | 0.052 |
| 非对称 RSA | |||
| RS256 | 10000 | 30342 | 3.03 |
| RS384 | 10000 | 88314 | 8.83 |
| RS512 | 10000 | 196748 | 19.67 |
| RS256 | 100000 | 285911 | 2.85 |
| RS384 | 100000 | 858241 | 8.58 |
| RS512 | 100000 | 1861344 | 18.61 |
| 非对称 ECDSA | |||
| ES256 | 10000 | 32375 | 3.23 |
| ES384 | 10000 | 64646 | 6.46 |
| ES512 | 10000 | 86273 | 8.62 |
| ES256 | 100000 | 285097 | 2.85 |
| ES384 | 100000 | 667266 | 6.67 |
| ES512 | 100000 | 764695 | 7.64 |
测试结论:
- 对称加密性能由于非对称加密
- RS256 RS284 RS512 签名验签时间依次递增,强度依次增大,ES256 ES384 ES512 同理
- ES系列算法 加密时间要小于 RS系列算法
长度测试:
测试数据有效长度:
61个字符串
测试结果:
| 算法 | header+body长度 | 总长度 | 签名长度 |
|---|---|---|---|
| HS256 | 193 | 236 | 43 |
| RS256 | 193 | 535 | 342 |
| ES256 | 193 | 279 | 86 |
header+body长度不变,因为都是base64编码;相同的签名算法,无论加密多大的数据的签名长度都是一致的。
测试结论:
- 对称加密签名长度要小于非对称加密签名长度
- RS系列算法签名长度要远大于ES系列签名算法
最终选择:
ES256

浙公网安备 33010602011771号