使用AES进行加解密手机号

简单了解:
  AES是一个对称加密算法

对称加密算法
  对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

开始应用:
1、AES加密方式有五种:
  1)、ECB
  2)、CBC
  3)、CTR
  4)、CFB,
  5)、OFB

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome 

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto

2、CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

3、秘钥的要求:使用的密钥。它必须是16、24或32字节长(分别用于AES-128AES-192或AES-256*)

加密内容要满足秘钥字节的倍数,不够要用空格填充

pad = lambda s: (s + (16 - len(s) % 16) * chr(16 - len(s) % 16))  -- 填充函数
unpad = lambda s: s[0:-s[-1]]	-- 逆填充函数

代码示例

class MobileEncryption:
    """手机号加解密"""
    def __init__(self, data):
        self.data = data
        self.__key = 'SPECIAL_TEST_AES'

    def encrypt(self):
        """加密"""
        pad = lambda s: (s + (16 - len(s) % 16) * chr(16 - len(s) % 16))  # 填充函数,不够的补位数
        raw = pad(str(self.data))  # 拿到补位后的数据
        cipher = AES.new(self.__key.encode(), AES.MODE_ECB) # 加密模式 选择用ECB加密,是一个对象
        encrypted_text = cipher.encrypt(bytes(raw, encoding='utf8')) # 开始加密,编码格式是utf8
        encrypted_text_base64 = base64.b64encode(encrypted_text)  # 进行编码为二进制,结果是二进制  b'xxxxxx'
        result = binascii.hexlify(encrypted_text_base64).decode('utf8').upper().strip() #进行编码转换,表示为二进制数据的十六进制
        return result

    def decrypt(self):
        """解密"""
        data = binascii.unhexlify(self.data)  # 十六进制进行解码转换
        # print(data)  # b'xxxxx'
        encodebytes = base64.decodebytes(data)  # 可以将二进制转化为正常形式
        cipher = AES.new(self.__key.encode('utf8'), AES.MODE_ECB) # 解密模式,是一个对象
        text_decrypted = cipher.decrypt(encodebytes) # 开始解密
        unpad = lambda s: s[0:-s[-1]]  # 逆填充函数,去掉空格
        text_decrypted = unpad(text_decrypted) # 拿到去掉补位后的数据
        text_decrypted = text_decrypted.decode('utf8') #解码字符串以utf8
        return text_decrypted
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值