AES加密

 AES是一个分组密码,属于对称密码范畴,AES算法的模块在对称密码领域特别是分组密码领域常有使用。

算法流程

AES加密算法涉及4种操作:

  • 字节替代(SubBytes):字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。
  • 行移位(ShiftRows):行移位是一个4x4的矩阵内部字节之间的置换,用于提供算法的扩散性。
  • 列混淆(MixColumns):利用GF(28)域上算术特性的一个代替,同样用于提供算法的扩散性。
  • 轮密钥加(AddRoundKey):加密过程中,每轮的输入与轮子密钥异或一次(解密时再异或上该轮的轮子密钥即可恢复)

加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。

整体算法流程如下:
这里写图片描述

详细算法流程请参考:
http://www.cnblogs.com/luop/p/4334160.html

python2.7实现

#coding=utf-8  

from Crypto.Cipher import AES  
from binascii import b2a_hex, a2b_hex  

class MyCrypto():  
    def __init__(self, key):  
        self.key_len = len(key)  
        if not self.key_len == 16 and not self.key_len == 24 and not self.key_len == 32:  
            raise Exception("秘钥长度不对,请重新检查秘钥长度")  
        self.key = key  
        self.mode = AES.MODE_CBC 

    def encrypt(self, text):  
        ''''' 
            被加密的明文长度必须是key长度的整数倍,如果不够,则用\0进行填充 
            转成16进制字符串,是因为避免不可见的ascii在显示的时候捣乱 
        '''  
        cryptor = AES.new(self.key, self.mode, self.key)  
        count = len(text)  
        add = self.key_len - (count % self.key_len)  
        text = text + ('\0' * add)  
        self.ciphertext = cryptor.encrypt(text)  
        return b2a_hex(self.ciphertext)  


    def decrypt(self, text):  
        ''''' 
            解密后需注意,加密时有可能填充\0,因此要去掉右侧的\0 
        '''  
        cryptor = AES.new(self.key, self.mode, self.key)  
        plain_text = cryptor.decrypt(a2b_hex(text))  
        return plain_text.rstrip('\0')  


#if __name__ == '__main__': 
paint_txt=raw_input("请输入明文:");  
key=raw_input("请输入秘钥:"); 
key_len=len(key) 
if not key_len == 16 and not key_len == 24 and not key_len == 32:  
    raise Exception("秘钥长度不对,请重新检查秘钥长度")     
mc = MyCrypto(key)  
e = mc.encrypt(paint_txt)  
d = mc.decrypt(e)  
print "加密后是:%s ;   解密后是:%s   "%(e ,d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值