1. 程式人生 > >常見的加密解密算法

常見的加密解密算法

問題 固定 rom 混合 open ifile 加密算 crypto sign

網絡中傳輸敏感信息的時候通常會對字符串做加密解密處理

技術分享圖片

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密鑰長度的最少支持為128、192、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加密(公鑰加密,私鑰解密)
它是目前最重要的加密算法!計算機通信安全的基石,保證了加密數據不會被破解。你可以想象一下,信用卡交易被破解的後果。甲乙雙方通訊,乙方生成公鑰和私鑰,甲方獲取公鑰,並對信息加密(公鑰是公開的,任何人都可以獲取),甲方用公鑰對信息進行加密,此時加密後的信息只有私鑰才可以破解,所以只要私鑰不泄漏,就能保證信息的安全性。

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)

  

常見的加密解密算法