- Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathEncryption.py
More file actions
Latest commit
executable file
·69 lines (56 loc) · 1.75 KB
/
Copy pathEncryption.py
File metadata and controls
executable file
·69 lines (56 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#! encoding=utf-8
# Author : kesalin@gmail.com
# Blog : http://kesalin.github.io
# Date : 2014/10/27
# Description : Encrypt/decrypt data.
# PyCrypto : 2.6
# Python : 2.7.3
#
importhashlib
importbase64
importsys
fromCrypto.CipherimportAES
fromCryptoimportRandom
frombinasciiimportb2a_hex, a2b_hex
defmd5(str):
returnhashlib.md5(str).hexdigest()
defsha1(str):
returnhashlib.sha1(str).hexdigest();
classAESCipher:
def__init__(self, key):
self.bs=32
iflen(key) >=32:
self.key=key[:32]
else:
self.key=self._pad(key)
defencrypt(self, raw):
raw=self._pad(raw)
iv=Random.new().read(AES.block_size)
cipher=AES.new(self.key, AES.MODE_CBC, iv)
result=base64.b64encode(iv+cipher.encrypt(raw))
returnb2a_hex(result)
defdecrypt(self, raw):
enc=base64.b64decode(a2b_hex(raw))
iv=enc[:AES.block_size]
cipher=AES.new(self.key, AES.MODE_CBC, iv)
returnself._unpad(cipher.decrypt(enc[AES.block_size:]))
def_pad(self, s):
returns+ (self.bs-len(s) %self.bs) *chr(self.bs-len(s) %self.bs)
def_unpad(self, s):
returns[:-ord(s[len(s)-1:])]
defencryptData(key, str):
aes=AESCipher(md5(key))
result=aes.encrypt(str)
returnresult
defdecryptData(key, str):
aes=AESCipher(md5(key))
result=aes.decrypt(str)
returnresult
if__name__=='__main__':
key='0123456789abcdef'
data="test"
en=encryptData(key, data)
de=decryptData(key, en)
print" >>> data:", data
print" >>> encrypt:", en
print" >>> decrypt:", de