網絡中傳輸敏感信息的時候一般會對字符串作加密解密處理python
1.Base64位加密(可加密解密)算法
最簡單的加密方式,沒有密鑰,這種方式只要讓別人拿到你的密文,就能夠直接解密,只能用來迷惑,通常狀況下不單獨使用,由於真的並無什麼卵用~能夠和其餘加密方式混合起來,做爲一層外部包裝。安全
import base64 data = "abc" #加密 m = Base64.encodestring(data) print m #獲得一個base64的值 #解密 date = Base64.decodestring(m)
2.MD5加密(加密不可逆)
MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法)。128位長度。目前MD5是一種不可逆算法。具備很高的安全性。它對應任何字符串均可以加密成一段惟一的固定長度的代碼。(小貼士:爲啥MD5加密算法不可逆呢~ 按道理來講有加密方式,就會有解密方式呀?由於MD5加密是有種有損的加密方式,好比一段數據爲'123',我在加密的時候,遇到1和3都直接當作是a,加密後變成了'a2a',因此解密的時候就出現了4種組合'323''121''123''321',數據一多,天然找不到原始的數據了,固然這種方式加密的密文也不須要解密,須要的時候直接發送原始密文就行了~只是看不到密文本來的內容)網絡
import hashlib import base64 data1 = "abc" data2 = 'def' hash = hashlib.md5() #多個文件屢次加密 hash.update(data1) hash.update(data2) value = hash.digest() print repr(value) #獲得一個二進制的字符串 print hash.hexdigest() #獲得一個十六進制的字符串 print base64.encodestring(value) #獲得base64的值
3.sha1加密(加密不可逆)
SHA1的全稱是Secure Hash Algorithm(安全哈希算法) 。SHA1基於MD5,加密後的數據長度更長。它對長度小於264的輸入,產生長度爲160bit的散列值。比MD5多32位。所以,比MD5更加安全,但SHA1的運算速度就比MD5要慢了。使用方法和MD5實際上是同樣的~ 函數
import hashlib #單個文件一次加密 value = hashlib.sha1('This is a sha1 test!').hexdigest() print value #獲得一個十六進制的字符串
4.AES加密(須要密鑰才能解密)
AES加密爲對稱密鑰加密,加密和解密都是用同一個解密規則,AES加密過程是在一個4×4的字節矩陣上運做,這個矩陣又稱爲"狀態(state)",由於密鑰和加密塊要在矩陣上屢次的迭代,置換,組合,因此對加密快和密鑰的字節數都有必定的要求,AES密鑰長度的最少支持爲12八、19二、256,加密塊分組長度128位。這種加密模式有一個最大弱點:甲方必須把加密規則告訴乙方,不然沒法解密。保存和傳遞密鑰,就成了最頭疼的問題。 加密
from Crypto.Cipher import AES #密鑰必須是16,24,32位的 key = '1234567890123456' data = 'abc' BS = 16 #加密函數,若是text不足16位就補足爲16位, pad = lambda s: s + (BS-len(s) % BS) * chr(BS - len(s) % BS) #加密 cipher = AES.new(key) encrypted = cipher.encrypt(pad(m)) #解密 cipher = AES.new(key) encrypted = cipher.decrypt(pad(m))
5.RSA加密(公鑰加密,私鑰解密)
它是目前最重要的加密算法!計算機通訊安全的基石,保證了加密數據不會被破解。你能夠想象一下,信用卡交易被破解的後果。甲乙雙方通信,乙方生成公鑰和私鑰,甲方獲取公鑰,並對信息加密(公鑰是公開的,任何人均可以獲取),甲方用公鑰對信息進行加密,此時加密後的信息只有私鑰才能夠破解,因此只要私鑰不泄漏,就能保證信息的安全性。spa
import rsa # 先生成一對密鑰,而後保存.pem格式文件,固然也能夠直接使用 (pubkey, privkey) = rsa.newkeys(1024) pub = pubkey.save_pkcs1() pubfile = open('public.pem','w+') pubfile.write(pub) pubfile.close() pri = privkey.save_pkcs1() prifile = open('private.pem','w+') prifile.write(pri) prifile.close() # load公鑰和密鑰 message = 'hello' with open('public.pem') as publickfile: p = publickfile.read() pubkey = rsa.PublicKey.load_pkcs1(p) with open('private.pem') as privatefile: p = privatefile.read() privkey = rsa.PrivateKey.load_pkcs1(p) # 用公鑰加密、再用私鑰解密 crypto = rsa.encrypt(message, pubkey) message = rsa.decrypt(crypto, privkey) print message # sign 用私鑰簽名認真、再用公鑰驗證簽名 signature = rsa.sign(message, privkey, 'SHA-1') rsa.verify('hello', signature, pubkey)