[C#] 一個有趣的速度測試關於 System.Security.Cryptography.RSA , XC.RSAUtil , BouncyUtil

2022-02-23

這故事來自於公司有一個服務裡面有用到加解密,然後效能一直都不好

原因是因為這裡面有用到 RSA 加解密,合作廠商提供的 Private Key 是使用 PEM

所以當初工程師使用了 BouncyCastle 去解..


有另一個同事覺得可能是 BouncyCastle 的問題,於是使用了 XC.RSAUtil 去解結果效能真的變好了,我就很訝異,真的有差這麼多嗎?

我那時候也在想為何不用內建的,微軟工程師又不是吃素的?

於是我就想說自己來測試看看,當然這測試並不一定很準確但是可以看出大概的速度

這裡面我盡量減少變因去單純測度,我使用 Parallel For 一萬次,跑五次後列出分別成績,中間加密文字統一產生 GUID 後加解密

解密後只判斷跟原字串是不是正常


這裡面測試標準 統一都用 System.Security.Cryptography.RSA 產生公鑰跟私鑰


然後測試 .net 內建的 System.Security.Cryptography.RSA ,當然如果是一般裝況下我的加密後資料可以直接使用 byte[] ,但是為了配合之後的

XC.RSAUtil 我統一都使用 base64 做處理


1. 選手 System.Security.Cryptography.RSA


2. 選手 XC.RSAUtil


3. 選手 BouncyCastle,為了減少變因,這裡面我把 Key  轉成 Org.BouncyCastle.Crypto.AsymmetricKeyParameter


結論

使用 BouncyCastle 大概會慢兩倍多一點,但是 XC.RSAUtil 跟內建的差不多,我後來去看 XC.RSAUtil 的確,他也是呼叫

System.Security.Cryptography.RSA  害我多測一個,不過大致上就是這樣

所以如果你使用 BouncyCastle 你每次使用還要多處理 Key 這樣一定會更慢,我這邊測試會慢三倍,結論能用內建就用內建的吧


當麻許的超技八 2014 | Donma Hsu Design.