業務背景:
項目在解決臨時權限的問題,欲引入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