因为遇到了加密解密的问题,翻看了一些关于此的博文,所以想在粗略的学习后记录下来,回顾以前并且加深印象。在以后的学习中再精细的雕琢。
MD5 是一种单向加密技术(不可解密)。MD5加密算法简单高效且
算出的值长度都是固定的, MD5值具有强抗碰撞,对原文件哪怕只修改一个字符,所计算出的MD5值也会发生很大变化。
基于这些特性,MD5在数据校验上发挥有很大作用。
PYTHON 中 MD5 有两种生成方式
import md5
text = 'hello everyone !'
m = md5.new()
m.update(text)
res = m.hexdigest()
print res
# 31b0c70dac41ed7ce0d185213275ae64
在python3中已经废除了MD5模块,推荐使用下面这种
import hashlib
text = 'hello everyone !'
m = hashlib.md5()
m.update(text)
print m.hexdigest()
# 31b0c70dac41ed7ce0d185213275ae64
与MD5类似,都属于hash算法,sha1加密相对于MD5加密要更安全些,但是效率相对于MD5会低一些。
import hashlib
text = "hello world !"
sha = hashlib.sha1(text)
print sha.hexdigest()
# 05966204d726546ea43af951e0c417d75dd5ac3c
hamc 同样是基于hash算法,与上面两个加密不同的是,hamc加密是以一个密钥和一个消息作为输入,生成一个消息摘要输出。
主要用于身份验证。
import hmac,hashlib
h = hmac.new(key='key',msg='hello')
h.update('world!')
ret = h.hexdigest()
print ret
# 774bd7473ce15ec74c015338cbf2d421
base64编码方法简单,但是却并不保险,别人很容易就能获取原始数据,通常是用来对文件进行一种格式化的操作。它是一种双向加密
import base64
s = base64.b64encode("hello world !")
print s
# aGVsbG8gd29yZCAh
s1 = base64.b64decode(s)
print s1
# hello world !
AES 只是个基本算法,实现AES有若干模式,而安全性较好的是CBC模式。cbc使用密码和salt按固定算法(md5)产生key和iv加密和解密。
from Crypto.Cipher import AES
import base64
class prpcrypt(object):
def __init__(self,key=')_9-+klo@c4t$k$w'):
self.key = key
self.mode = AES.MODE_CBC
# cryptographic functions
def encrypt(self,text):
cryptor = AES.new(self.key,self.mode,self.key)
length = 16
count = len(text)
add = length - (count % length)
text = text + ('\0'*add)
self.ciphertext = cryptor.encrypt(text)
return base64.b64encode(self.ciphertext)
def decrypt(self,text):
cryptor = AES.new(self.key, self.mode, self.key)
plain_text = cryptor.decrypt(base64.b64decode(text))
print plain_text
print plain_text.rstrip('\0')
return 'ok'
a = prpcrypt()
text = a.encrypt("hello world!")
print text
a.decrypt(text)