python AES加解密(自己摸索)

 

今天对接jd的一些接口,中间需要加密,那边开发人员说用DES加密方式,怎么弄都不对,最后要对方把代码发给我看看(java),最后发现是一个AES加解密的方式,晕。。。。

下面是重点

代码:

# encoding:utf-8

import base64
from Crypto.Cipher import AES


class c_AES(object):

    @staticmethod
    def encrypt(data, password,mode=AES.MODE_ECB,iv="0000000000000000"):
        #iv的默认值就是16个0,当时这块纠结了很久,后来在网上看到有写0的,就试了试
        try:
            bs = AES.block_size
            pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
            cipher = AES.new(password, AES.MODE_ECB, iv)
            data = cipher.encrypt(pad(data))
            return base64.b64encode(data)
        
        except:
            return ""
    
    
    @staticmethod
    def decrypt(data, password,mode=AES.MODE_ECB):
    
        try:
            data = base64.b64decode(data)
            
            #将后面的填充数据去掉
            unpad = lambda s : s[0:-ord(s[-1])]
            
            cipher = AES.new(password, mode)
            data  = unpad(cipher.decrypt(data))
            return data
        
        except:
            return ""
 
 
 
if __name__ == '__main__':
    key = '1vgerdkvtoiudfh6' #初始化密钥
    data = '''{"settleId":"123", "userId":"234"}'''
    
    password = key #16,24,32位长的密码
    encrypt_data = c_AES.encrypt(data, password)
    
    print 'encrypt_data:', encrypt_data    
    decrypt_data = c_AES.decrypt(encrypt_data, password)
    print 'decrypt_data:', decrypt_data
    

 

博客园编辑小结:插入代码的时候,觉得没必要添加行号,因为拷贝的时候,会把行号拷贝下来,使用的时候还得删除,比较麻烦,以舒适至上。

 

posted @ 2017-11-28 19:06  lijiyu11408237  阅读(15)  评论(0)    收藏  举报