HASH
簡述:
Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數
特點
- 算法是公開的
- 對相同數據運算,得到的結果是一樣的
- 對不同數據運算,如MD5得到的結果默認是128位,32個字符(16進制標識)。
- 無法進行逆運算
- 信息摘要,信息“指紋”,是用來做數據識別的。電子簽名等等
用途
用戶密碼的加密
通過運用HASH算法,給用戶的密碼進行加密。
密碼加密的方式
1.直接使用MD5
2.MD5加鹽
3.HMAC加密方案
4.添點東西搜索引擎
版權。
數字簽名(HASH+RSA)
用于鑒別數字信息的方法 用于證明數字信息的真偽
對稱加密
簡述:
對稱加密方式:明文通過密鑰加密得到密文。密文通過密鑰解密得到明文。
常見算法
DES 數據加密標準(強度不夠,使用較少)
3DES 使用3個密鑰,對相同的數據執行3次加密,強度增強
-
AES 高級密碼標準
應用模式 加密方案 ECB&CBC (iV 向量)
-
ECB(ElectronicCode Book):電子密碼本模式。每一塊數據,獨立加密。
特點:效率高,速度快最基本的加密模式,也就是通常理解的加密,相同的明文將永遠加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,一般情況下很少用
CBC(CipherBlock Chaining):密碼分組鏈接模式。使用一個密鑰和一個初始化向量[IV]對數據執行加密。
特點:安全
明文被加密前要與前面的密文進行異或運算后再加密,因此只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前應用最廣泛的模式。CBC加密后的密文是上下文相關的,但明文的錯誤不會傳遞到后續分組,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)
CBC可以有效的保證密文的完整性,如果一個數據塊在傳遞是丟失或改變,后面的數據將無法正常解密
PS:異或運算
異或,英文為exclusive OR,縮寫成xor
異或(xor)是一個數學運算符。它應用于邏輯運算。異或的數學符號為“⊕”,計算機符號為“xor”。其運算法則為:
a⊕b = (?a ∧ b) ∨ (a ∧?b)
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
異或也叫半加運算,其運算法則相當于不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。
異或略稱為XOR、EOR、EX-OR
程序中有三種演算子:XOR、xor、⊕。
使用方法如下
z = x ⊕ y
z = x xor y
與其它語言不同,C語言和C++語言的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)
若需要交換兩個變量的值,除了通常使用的借用中間變量進行交換外,還可以利用異或,僅使用兩個變量進行交換,如:
void swap(int &a,int &b)
{
a=a^b;
b=b^a;
a=a^b;
}
詳解:
a1=a^b
b=b^a1=b^a^b=a
//此時a1=a^b b=a
a=a1^b=a^b^a=b
注意:
1
a=a^b^(b=a);//此類形式是不正確的UB行為,在不同編譯器中會有不同的結果,切勿使用
這樣就完成了a與b的交換。
綜上:同一變量與另一變量和其異或值異或等于另一個數,如(a^b)^b=a。
用例:可使用于加密算法某一環節或更多環節,使算法更復雜,不易被破解,安全性更高。
終端命令:
?加密:
?AES(ECB)加密“hello”字符串
$ echo -n hello | openssl enc-aes-128-ecb -K 616263 -nosalt |base64
?AES(CBC)加密“hello”字符串
?$ echo -n hello | openssl enc-aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt |base64
?解密:
?AES(ECB)解密
?$echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc-aes-128-ecb -K 616263 -nosalt –d
?AES(CBC)解密
$ echo -nu3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc-aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d
CCCrypt函數 數據加密之前,對數據本身處理一下,異或等等,