項目中有這樣一個需求,客戶端登陸服務器時,為保證信息安全,需要對用戶的密碼進行加密傳輸,在服務器端接受到之后進行相應的解密。
一、加密算法分類
對稱加密算法、不對稱加密算法、不可逆加密算法
1、對稱加密算法
特點:較早、技術成熟
原理:
數據發信方將明文和加密秘鑰一起經過特殊加密算法處理后,使其變成復雜的加密密文發送出去;收信方收到密文后,若想解讀原文,則需要使用加密用過的密鑰及相同算法的逆算法對密文進行解密,才能恢復成可讀明文。在對稱加密算法中,使用的密鑰只有一個,發收信雙發都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。
技術特點:
算法公開、計算量小、加密速度快、加密效率高。
不足之處是:交易雙發使用相同密鑰,安全性得不到保證。此外,每對用戶都需要使用被人不知道的唯一的密鑰,這會使得密鑰管理非常困難。對稱加密算法在分布式網絡上使用較為困難;在專用網中廣泛使用的加密算法有DES、IDEA等。AES
DES、IDEA
2、不對稱加密算法
特點:
原理:
不對稱加密算法使用兩把完全不同但是又是完全匹配的以對鑰匙--公鑰和私鑰。在使用不對稱加密算法加密文件時只有匹配的一對公鑰和私鑰才能完成對明文的加密和解密過程。加密明文時采用公鑰加密,解密密文時使用私鑰解密,而且發信方知道收信方的公鑰,只有收信方才知道自己的私鑰。
技術特點:
基本原理是:如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然后利用收信方的公鑰來加密原文;收信方收到加密密文后,使用自己的私鑰才能解密密文。顯然,采用不對稱加密算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。
RSA、DSA
3、不可逆加密算法
不可逆加密算法的特征是加密過程中不需要使用密鑰,輸入明文后由系統直接經過加密算法處理成密文,這種加密后的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密算法處理,得到相同的加密密文並被系統重新識別后,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的“密碼”也就是輸入的明文。不可逆加密算法不存在密鑰保管和分發問題,非常適合在分布式網絡系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密算法。近年來,隨着計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網絡中應用較多不可逆加密算法的有RSA公司發明的MD5算法和由美國國家標准局建議的不可逆加密標准SHS(Secure Hash Standard:安全雜亂信息標准)等
二、主要的C++算法庫
1、OpenSSL
openssl現在的狀態不佳,自從心臟出血事件之后,可謂是牆倒眾人推,網上也有好多人說它的代碼寫的很差,沒有良好的代碼規范,基於這些理由,又是項目中使用的,所以,還是不去冒這個險了。
2、Crypto++
這個庫在網上的評價還算不錯的,支持多種加密算法
3、Botan
這個庫沒有太多的了解,也僅僅是剛知道,也是支持多種加密算法的
4、Cryptlib
了解不多,暫不做評論
三、選擇
這里暫時選擇Cryto++這個庫,選擇這個庫主要是因為現在手頭找到的關於它的資料文檔最多,容易快速上手。別的就待以后再去接觸吧。
選擇這個庫,使用它提供的aes256算法來實現上面的需求。