业务背景
项目在解决临时权限的问题,欲引入 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
算法 | 循环次数 | 总耗时 ms | 平均耗时 ms |
---|---|---|---|
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
算法 | 循环次数 | 总耗时 ms | 平均耗时 ms |
---|---|---|---|
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 系列签名算法
v1.5.2