目錄
- MD5加密
- HMAC加密
- base64加密
- 對稱加密
- RSA加密 - 非對稱加密
一.MD5加密
MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數(shù)字字母混合碼赏半。
MD5主要特點是 不可逆妨退,相同數(shù)據(jù)的MD5值肯定一樣蔓涧,不同數(shù)據(jù)的MD5值不一樣(也不是絕對的,但基本是不能一樣的)。
MD5算法還具有以下性質:
1呻畸、壓縮性:任意長度的數(shù)據(jù)碟贾,算出的MD5值長度都是固定的币喧。
2、容易計算:從原數(shù)據(jù)計算出MD5值很容易袱耽。
3杀餐、抗修改性:對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié)朱巨,所得到的MD5值都有很大區(qū)別史翘。
4、弱抗碰撞:已知原數(shù)據(jù)和其MD5值冀续,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的恶座。
5、強抗碰撞:想找到兩個不同的數(shù)據(jù)沥阳,使它們具有相同的MD5值跨琳,是非常困難的。
MD5雖然說是不可逆的 但是由于有網(wǎng)站http://www.cmd5.com的存在桐罕,專門用來查詢MD5碼 所以有的簡單的MD5碼是可以在這里搜到源碼的脉让。
為了讓MD5碼更加安全 涌現(xiàn)了很多其他方法 如加鹽。 鹽要足夠長足夠亂 得到的MD5碼就很難查到功炮。
終端代碼:
$ echo -n abc|openssl md5
給字符串a(chǎn)bc加密
二.HMAC加密
此加密方法需要先生成密鑰溅潜,然后再對密碼進行MD5和HMAC加密,數(shù)據(jù)庫中需要存放當時使用的密鑰和密碼加密后的密文
在用戶登陸時 再次對填入的密碼用密鑰進行加密 并且還要加上當前時間(精確到分鐘) 再次HMAC加密薪伏,服務器里也會拿出以前存放的密文加上時間再次加密滚澜。所以就算黑客在中途截取了密碼的密文 也在能在1分鐘只能破譯才能有效,大大加強了安全性嫁怀。服務器為了考慮到網(wǎng)絡的延遲一般會多算一種答案设捐,如23分過來的密碼 他會把23分和22分的都算一下和用戶匹配只要對上一個就允許登陸。
如圖 用戶注冊與用戶登錄
三.base64加密
在MIME格式的電子郵件中塘淑,base64可以用來將binary的字節(jié)序列數(shù)據(jù)編碼成ASCII字符序列構成的文本萝招。使用時,在傳輸編碼方式中指 定base64存捺。使用的字符包括大小寫字母各26個槐沼,加上10個數(shù)字,和加號“+”,斜杠“/”岗钩,一共64個字符纽窟,等號“=”用來作為后綴用途。
完整的base64定義可見RFC 1421和RFC 2045兼吓。編碼后的數(shù)據(jù)比原始數(shù)據(jù)略長臂港,為原來的4/3。
原理圖
終端指令
先cd 找到當前目錄
加密: $ base64 abc.png -o abc.txt
解密: $ base64 abc.txt -o 123.png -D
四.對稱加密算法
優(yōu)點:
算法公開周蹭、計算量小、加密速度快疲恢、加密效率高凶朗、可逆
缺點:
雙方使用相同鑰匙,安全性得不到保證
現(xiàn)狀:
對稱加密的速度比公鑰加密快很多显拳,在很多場合都需要對稱加密棚愤,
相較于DES和3DES算法而言,AES算法有著更高的速度和資源使用效率杂数,安全級別也較之更高了宛畦,被稱為下一代加密標準
nECB :
電子代碼本,就是說每個塊都是獨立加密的
nCBC :
密碼塊鏈揍移,使用一個密鑰和一個初始化向量 (IV)對數(shù)據(jù)執(zhí)行加密轉換
ECB和CBC區(qū)別:CBC更加復雜更加安全次和,里面加入了8位的向量(8個0的話結果等于ECB)。在明文里面改一個字母那伐,ECB密文對應的那一行會改變踏施,CBC密文從那一行往后都會改變。
ECB終端命令:
$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin
CBC終端命令:
$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.txt -out msg2.bin
五.RSA加密 - 非對稱加密算法
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
公開密鑰與私有密鑰是一對罕邀,如果用公開密鑰對數(shù)據(jù)進行加密畅形,只有用對應的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密诉探,那么只有用對應的公開密鑰才能解密
特點:
- 非對稱密碼體制的特點:算法強度復雜日熬、安全性依賴于算法與密鑰但是由于其算法復雜,而使得加密解密速度沒有對稱加密解密的速度快
- 對稱密碼體制中只有一種密鑰肾胯,并且是非公開的竖席,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全敬肚,而非對稱密鑰體制有兩種密鑰怕敬,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了
基本加密原理:
1帘皿、找出兩個“很大”的質數(shù):P & Q
2东跪、N = P * Q
3、M = (P – 1) * (Q – 1)
4、找出整數(shù)E虽填,E與M互質丁恭,即除了1之外,沒有其他公約數(shù)
5斋日、找出整數(shù)D牲览,使得E*D除以M余1,即 (E * D) % M = 1
經(jīng)過上述準備工作之后恶守,可以得到:
-
E
是公鑰第献,負責加密 -
D
是私鑰,負責解密 -
N
負責公鑰和私鑰之間的聯(lián)系 - 加密算法兔港,假定對X進行加密
(X ^ E) % N = Y
-
n
根據(jù)費爾馬小定義庸毫,根據(jù)以下公式可以完成解密操作(Y ^ D) % N = X
但是RSA加密算法效率較差,對大型數(shù)據(jù)加密時間很長衫樊,一般用于小數(shù)據(jù)飒赃。
常用場景:
- 分部要給總部發(fā)一段報文,先對報文整個進行MD5得到一個報文摘要科侈,再對這個報文摘要用公鑰加密载佳。然后把報文和這個RSA密文一起發(fā)過去。
- 總部接收到報文之后要先確定報文是否在中途被人篡改臀栈,就先把這個密文用私鑰解密得到報文摘要蔫慧,再和整個報文MD5一下得到的報文摘要進行對比 如果一樣就是沒被改過。