#!/usr/bin/env python # encoding: utf-8 # pip install pycrypto # 3des, cbc mode import json import base64 from Crypto.Cipher import DES3 def pad(text): """ 补齐为8的倍数 """ ext_byte_count = len(text) % 8 if ext_byte_count == 0: return text add_byte_count = 8 - ext_byte_count return text + ' ' * add_byte_count def tobase64(encrypt_data): """ base64 """ return base64.b64encode(encrypt_data) # 1. must be 16/24 bytes, 约定好 secret_key = 'a' * 24 # 2. 表单数据获取拼json, 或者其他格式, 需要和engine约定好 data = { 'app_code': 'test', 'auth_token': 'xxxxxxxxxx', 'mac': '10:dd:b1:ff:fe:37:cd:90,10:dd:b1:ff:fe:37:cd:90,10:dd:b1:ff:fe:37:cd:90' } data_string = json.dumps(data) data_string = pad(data_string) print 'before encrypt: ', data_string # 3. 加密 # use triple des des3 = DES3.new(secret_key, mode=DES3.MODE_CBC, IV=secret_key[:8]) # des3 = DES3.new(secret_key) encrypt_data = des3.encrypt(data_string) print "after encrypt:", encrypt_data # 4. 给用户的, 再base64, 因为加密后存在很多特殊的字符 raw_base64 = tobase64(encrypt_data) print "tobase64: ", raw_base64 # 5. 示例, 解密 # note: 反向解开不能用同一个对象 raw_data = base64.b64decode(raw_base64) des32 = DES3.new(secret_key, mode=DES3.MODE_CBC, IV=secret_key[:8]) # des32 = DES3.new(secret_key) raw_base64 = des32.decrypt(raw_data) print "after deencrypt: ", json.loads(raw_base64)