程式設計

說說幾種Angular和C#搭配時可以用的加密演算法

由於前端和後台的呼叫若是在非同一個網域,會很需要Token這類的防護機制,那加密演算法就是非常必要的。好的加密演算法可以顧及效能,又讓破解難度提高,進而讓想破解的人放棄。

先說說本篇文章要講得幾種加密演算法,包含雜湊的演算法:XOR、AES、MD5、SHA256。

用這幾種演算法搭配就可以做到很好的防護,又可以顧到最佳效能。

XOR演算法

XOR演算法基本上只是把字元碼改變,然後再改變一次用同樣的Key會改變回原本的。這種演算法速度極快,如果是Angular要加密本機儲存體,或Session儲存體裡面的資料,這種加密演算法可以增加破解難度,又不影響程式效能太多。即使是幾千個字元的JSON文字,用XOR也不到一秒就可以加密又解密好。

因為這個加密演算法Key絕對在被破解的時候會被發現,所以不合適拿來存機密或能篡改的資訊。但有些資訊也不想讓用戶直接看到的,比如頁面的暫存,這種就很合適用XOR。還有模仿JWT的Token前段的資料可以直接用XOR省解密時間,因為後端的MD5或SHA256會經過AES加密幾乎不可能破解,XOR的內容被篡改會因為雜湊值不一樣被發現。

XOR是一個好東西,只要利用對地方,程式的效能會比全部都用AES來的快非常非常多。

AES演算法

AES大概是現在加密演算法裡面相當安全的,要有一個向量和一個Key的對稱加密演算法。

要破解理論上不要弄很蠢的Key和向量大概是不可能,就算把向量和Key設定成公司電話和公司統編可能都沒人破解的了。

這個適合不想讓人解密的,尤其是後端傳過到前端的絕對不能讓人解密的資訊。因為Key和IV存在後端,只要後端不要被破解,就沒有人知道怎樣解密。

JWT的運用用AES加密MD5或SHA256來驗證前半段的資料是最佳解。

MD5雜湊演算法

MD5演算法速度比SHA256快很多,其實在驗證資料正確性的時候,大量的資料用MD5會是正確的,如果使用的是雲端服務,CPU的運算資源會是成本。MD5可以節省掉很多的成本。

雖然MD5可能會有重複,但通常只差一兩個字元的話會是完全不一樣的結果。

所以如果是要做JWT我建議使用MD5來當後半段的加密後的驗證。

因為每呼叫一次API就要解密、驗證MD5,如果用SHA256會慢一些。

SHA256雜湊演算法

這個演算法很適合作為檔案與內容唯一值的種子,比如要產生的獨特ID根據,或者根本就當獨特ID作為主索引。

因為有64個英文數字,幾乎是不可能會在同一段時間內有重複的SHA256出現,所以比如說檔案上傳存到資料庫,那就加一個SHA256,可以變成主索引,或者作為有沒有同樣檔案的判斷。

這個運算比MD5久很多,雖然雲端的CPU多半很夠力,但在顧及同樣的安全性下能省則省,我不會建議這個來當JWT的驗證機制。

因為JWT的驗證雜湊一定經過AES的加密,光是要破解AES就不太可能,竄改以後要符合MD5也是不可能,除非AES的IV和Key洩漏出去,那SHA256也防不了。

結論

其實我上一個完整的產品就只用這幾個加密演算法,當然Base64加密也是一種,但這個我覺得不算加密(因為只要在呼叫一次Base64,連Key都不用給就解密)。

XOR的Key如果有心人人都會破解,因為Angular是前端框架,JS的部分還是會被解開,只要對方時間夠多。那都會被解開的話用AES就一點意義都沒有,只是徒增程式造成CPU的負擔而已。

這四種加密演算法用得好,再加一些自己產生的數字驗證,如第幾位加第幾位乘以第幾位餘數第幾位等於驗證碼,可以增加很多破解的複雜度,如果寫的不是加密貨幣交易所,或者網路銀行,大概大家連破解都懶了。

What's your reaction?

Excited
0
Happy
0
In Love
0
Not Sure
0
Silly
0

Comments are closed.