開發中的幾種加密演算法的使用場景
資料傳輸過程中的加密是程式開發中避不開的一個問題。如何更科學更合理的使用加密演算法也就成了一個開發人員必須瞭解的知識點,本文就該問題做簡單的介紹。
注意:這些演算法的詳細知識不屬於本文的範圍。本文主要是根據其特點,說明如何在開發中合理使用這些演算法。
常見的加密演算法:
加密演算法有很多,這裡只列出開發中常用的幾種。
MD5:
嚴格來講這不算是一種加密演算法,應該叫做資訊摘要演算法。也是目前開發中應用非常廣的演算法。MD5是一種不可逆的加密演算法,無法通過密文還原成明文(注意:是演算法上不能實現),對於簡單的MD5加密,是可以通過一些線上工具網站解密出來。目前在開發中主要用在檔案(圖片、視訊、文件等檔案)的唯一性標識。比如我們的系統有一個需求,需要儲存每一個使用者上傳的 word 文件,word文件的命名沒有強制要求規則,這時就會發生這樣一種情況,使用者A 和 使用者B 都上傳了的一個名為 《大資料學習路徑規劃》的word檔案。這時系統如果直接儲存在同一個目錄下就會造成衝突,就像 windows 裡面同一個資料夾下不能有同名檔案一樣。這個時候要解決衝突就可以採用MD5,當然解決方式不止這一種。具體操作就是我們可以使用 md5 對檔案進行一個計算得到其 hash 值,只要是兩個不同的檔案,該值就是唯一的,所以就可以這個hash值作為該檔案的實際儲存名,原名根據需求儲存即可。
RSA和AES
RSA是一種非對稱的加密演算法(加密【公鑰】和解密【私鑰】的 key 是不同的),AES是對稱的加密演算法(加密和解密的 key 是相同的),兩者的詳細知識不屬於本文範圍。
分析這兩種演算法的特點可以知道,單純的使用 AES 的來加密兩者傳輸中的資料的時候首先要讓雙方要知道祕鑰是什麼,可問題就是這個祕鑰的傳輸是一個問題,直接通過網路傳輸是極其不安全的。因為網路一旦被監聽,這個祕鑰就沒有存在的意義了,而監聽一個網路,難度並不是很大,所以我們不能直接使用AES。
再來看RSA,由於RSA是非對稱的加密演算法,私鑰用來解密,公鑰用來加密,公鑰之所以帶“公”,也是因為其本身就是就需要對外公開的,並不需要保密。這樣對於通訊雙方來說,建立連結之後的第一件事就是雙方分發自己的公鑰給對方,一端資料傳輸給對方的時候,先使用接收方發過來的公鑰對資料進行加密後再傳送,之後接收方會使用自己的私鑰解密資料得到明文,然後再使用對方的公鑰加密敏感的響應資料,之後再傳送給對方,對方拿自己的私鑰解密。這樣就完成了資料的加密傳輸通訊。我們分析這個過程可以知道,整個傳輸過程中,只是對外暴露了公鑰,這時即使黑客拿到了公鑰,但是也無法解密傳輸過程中的資料,因為只有私鑰才能解密資料。這樣看起來就完美的解決了雙方的加密通訊問題。但是有這種加密演算法相比 AES 比較耗資源,對於一個訪問量比較大的web服務來說,是不推薦的。
RSA和AES的結合:
通過上面的分析,我們結合兩者的優點,建立新的使用模式。先來張圖做一個簡單介紹
從上圖可以看出,當客戶端要與伺服器端通訊的時候,客戶端先使用 RSA 演算法生成自己的公鑰和私鑰,然後把公鑰以明文的方式傳送給伺服器,伺服器拿到公鑰,並使用從客戶端接收到的公鑰對 AES 的祕鑰進行加密然後返回給客戶端。客戶端接收到加密後的 AES 祕鑰後就可以直接使用自己的私鑰解密 AES 的祕鑰,從而得到 AES 祕鑰明文。之後兩者的通訊就可以使用 AES來實現敏感資訊的加密了。這個操作就即解決了 AES 祕鑰的傳輸問題,又解決了 RSA 演算法效率不高的問題。
相關文章
- 加密,各種加密,耙梳加密演算法(Encryption)種類以及開發場景中的運用(Python3.10)加密演算法Python
- redis常見的幾種使用場景Redis
- PHP 併發場景的幾種解決方案PHP
- 【開發經驗】幾種常見的加密方式加密
- 沉浸式空間場景的使用有哪幾種方式?
- iOS開發中的幾種鎖iOS
- MyBatis 中 @Param 註解的四種使用場景MyBatis
- 事物系統的幾種異常場景
- 幾種場景的資料庫恢復資料庫
- sudo命令使用的幾個場景
- Python幾種加密演算法Python加密演算法
- max場景瘦身,加快場景的開啟速度(多種方法)
- spring事務失效的幾種場景以及原因Spring
- Redis 中 BitMap 的使用場景Redis
- SparkSQL中產生笛卡爾積的幾種典型場景以及處理策略SparkSQL
- iOS 開發中 runtime 常用的幾種方法iOS
- Redis中5種資料結構的使用場景介紹Redis資料結構
- 程式開發中常用的10種演算法,你用過幾種?演算法
- git 忽略檔案的幾種方式以及應用場景Git
- FutureTask的用法及兩種常用的使用場景
- go語言reflect包使用的幾個場景Go
- SpringMVC 中 @ControllerAdvice 註解的三種使用場景!SpringMVCController
- 一文搞懂,這幾種 API 的不同應用場景API
- 關於ORA-01536 報錯的幾種場景:
- Python透過函式名呼叫函式的幾種場景Python函式
- PHP中RSA加密演算法的使用PHP加密演算法
- iOS常見的幾種加密方法iOS加密
- Redis 中 HyperLogLog 的使用場景Redis
- MyBatis 中 @Param 註解的四種使用場景,最後一種經常被人忽略!MyBatis
- 一文弄懂分散式場景中各種鎖的原理及使用分散式
- 8個Spring事務失效的場景,你碰到過幾種?Spring
- 從“悲劇”的幾個運維場景談談運維開發的痛點運維
- C++BUILDER中幾種容器的使用C++UI
- javascript中的this使用場景以及箭頭函式中的thisJavaScript函式
- 最適合使用RxJava處理的四種場景RxJava
- Map的使用場景
- grep 的使用場景
- iOS 幾種加密方法iOS加密