常用加密演算法
概述
- 摘要演算法: 不可逆,固定長度,主要用於完整性檢測,資料安全儲存,比如sha1,md5。
- 對稱加密: 加密解密使用相同的金鑰,但是在金鑰交換的過程中要使用非對稱加密。
- 非對稱加密:加密解密使用不同的金鑰,但是肯定是速度比較慢。
摘要演算法:
常用的摘要演算法有MD5,SHA1。摘要演算法是一個不可逆過程,就是無論多大資料,經過演算法運算後都是生成固定長度的資料,一般結果使用16進位制進行顯示。
MD5和SHA1的區別:
MD5結果是128位摘要,即16個位元組,用十六進位制表示的話就是32個字元。
SHa1是160位摘要。即20個位元組,用十六進位制表示就是40個字元。
SHa256是256位摘要。即32個位元組,用十六進位制表示就是64個字元。
那麼MD5的速度更快,而SHA1的強度更高。
摘要演算法用途:
- 訊息完整性:由於每一份資料生成的MD5值不一樣,因此傳送資料時可以將資料和其MD5值一起傳送,然後就可以用MD5驗證資料是否丟失、修改。
- 安全訪問認證:這是使用了演算法的不可逆性質,(就是無法從MD5值中恢復原資料)對賬號登陸的密碼進行MD5運算然後儲存,這樣可以保證除了使用者之外,即使資料庫管理人員都無法得知使用者的密碼。
- 數字簽名:這是結合非對稱加密演算法和CA證書的一種使用場景。
摘要演算法程式碼:
In [22]: import hashlib
In [23]: hashlib.md5(b'hello').hexdigest()
Out[23]: '5d41402abc4b2a76b9719d911017c592'
In [24]: hashlib.sha1(b'hello').hexdigest()
Out[24]: 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
In [25]: hashlib.sha256(b'hello').hexdigest()
Out[25]: '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
In [26]: len('5d41402abc4b2a76b9719d911017c592')
Out[26]: 32
In [27]: len('aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
Out[27]: 40
In [28]: len('2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824')
Out[28]: 64
對稱加密
對稱加密演算法只是為了區分非對稱加密演算法。其中鮮明的特點是對稱加密是加密解密使用相同的金鑰,而非對稱加密加密和解密時使用的金鑰不一樣。對於大部分情況我們都使用對稱加密,而對稱加密的金鑰交換時使用非對稱加密,這有效保護金鑰的安全。非對稱加密加密和解密金鑰不同,那麼它的安全性是無疑最高的,但是它加密解密的速度很慢,不適合對大資料加密。而對稱加密加密速度快,因此混合使用最好。
常用的對稱加密演算法有:AES和DES.
- DES:比較老的演算法,一共有三個引數入口(原文,金鑰,加密模式)。目前基本被廢除,
而3DES只是DES的一種模式,是以DES為基礎更安全的變形,對資料進行了三次加密,也是被指定為AES的過渡演算法。
DES廢除的原因一個是金鑰位數太少,在現在的計算能力下,已經無法保證安全,第二個原因是,DES是為硬體加密設計的,對於現在軟體來說計算效率不夠好,第三個原因是,一直有人懷疑DES的S盒中隱藏著後門,而這個後門被美國安全域性掌握。所以提出了AES - AES:高階加密標準,新一代標準,加密速度更快,安全性更高(不用說優先選擇)
對稱加密用途
所以一般的HTTPS連線只在第一次握手時使用非對稱加密,通過握手交換對稱加密金鑰,在之後的通訊走對稱加密。
對稱加密程式碼
# pip install crypto
ln [23]: from Crypto.Cipher import AES
In [24]: e = AES.new(b'asdfasdfasdfasdf',AES.MODE_CBC,b'asdfasdfasdfasdf')
In [25]: d = AES.new(b'asdfasdfasdfasdf',AES.MODE_CBC,b'asdfasdfasdfasdf')
In [26]: a = e.encrypt(b'hellohellohello0')
In [27]: a
Out[27]: b"\xf8\x01\x97\xf0\xda'\xa0O\x8d\x0c;\x88#\xdc\xb5l"
In [28]: d.decrypt(a)
Out[28]: b'hellohellohello0'
幾個常用的加密組合
ssh原理
這裡進行一下說明:
首先服務端會通過非對稱加密,產生一個公鑰和私鑰;
在客戶端發起請求時,服務端將公鑰暴露給客戶端,這個公鑰可以被任意暴露;
客戶端在獲取公鑰後,會先產生一個由256位隨機數字組成的會話金鑰,這裡稱為口令;
客戶端通過公鑰將這個口令加密,傳送給伺服器端;
伺服器端通過私鑰進行解密,獲取到通訊口令;
-
之後,客戶端和服務端的資訊傳遞,都通過這個口令進行對稱的加密。
https 加密原理
第一步,愛麗絲給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支援的加密方法。
第二步,鮑勃確認雙方使用的加密方法,並給出數字證書、以及一個伺服器生成的隨機數(Server random)。
第三步,愛麗絲確認數字證書有效,然後生成一個新的隨機數(Premaster secret),並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。
第四步,鮑勃使用自己的私鑰,獲取愛麗絲髮來的隨機數(即Premaster secret)。
第五步,愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成"對話金鑰"(session key),用來加密接下來的整個對話過程。
參考
https://blog.csdn.net/u013565368/article/details/53081195
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
相關文章
- Java 常用加密解密演算法Java加密解密演算法
- 那些常用的加密演算法加密演算法
- C/C++ 常用加密與解密演算法C++加密解密演算法
- 程式設計中常用的加密演算法程式設計加密演算法
- Java實現常用加密演算法-SM4Java加密演算法
- 淺談iOS中常用加密演算法的使用iOS加密演算法
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- 面試官:說一下你常用的加密演算法面試加密演算法
- nodejs常用加密方式 RSA & AESNodeJS加密
- Android中常用的加密方式Android加密
- SHA加密演算法加密演算法
- Rabbit加密演算法加密演算法
- 加密演算法(一)加密演算法
- RSA加密演算法加密演算法
- 常見加密演算法及常見加密演算法簡述加密演算法
- 常用演算法演算法
- Java 常用的 4 種加密方式Java加密
- 加密演算法學習加密演算法
- 加密演算法的使用加密演算法
- 凱撒加密演算法加密演算法
- 常用演算法模板演算法
- 常用演算法合集演算法
- 常用限流演算法演算法
- GIS常用演算法演算法
- 常用排序演算法排序演算法
- js 常用演算法JS演算法
- 非對稱加密演算法-RSA演算法加密演算法
- MD5加密演算法加密演算法
- Java中Blowfish加密演算法Java加密演算法
- DreamJudge-1014-加密演算法加密演算法
- 加密解密演算法系列加密解密演算法
- Go加密演算法總結Go加密演算法
- Python幾種加密演算法Python加密演算法
- 微信小程式及各種平臺對接常用可逆加密演算法aes256微信小程式加密演算法
- 淺談常用影片加密原理及加密的幾種應用形式加密
- 常用演算法 插值演算法演算法
- 應用加密1;非對稱加密演算法揭祕加密演算法
- 常用演算法之貪心演算法演算法