python3.6 实现AES加密---

发布时间:2019-07-29 10:11:21编辑:auto阅读(1262)

    起因

    前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据库密码是明文显示的,所以不太安全,由此对其进行加密。

    编码之路

    编程环境

    • Python3.6
    • 第三方库–pyCryptodome

    第三方库的介绍及下载

    1.在之前的AES加密中,python2或者3.4采用的是pyCyrpto这个模块,但是昨天废了好大劲去安装它都是失败,而经过大量查阅发现此库已经停止维护了,在安装过程中尽管用pip install pycryto 去下载,对应的tar.gz可以下载,但是在自动安装时会报错,说是没有微软2014的工具环境。

    2.后经继续查阅,发现pyCyrpto库的后续分支,有一个叫pyCryptodome的库,是前代的延伸版,下面给出一个全面的地址,如果有pip安装不了的库可以通过此网站进行对应的下载。
    点我啦

    https://www.lfd.uci.edu/~gohlke/pythonlibs/

    这里写图片描述

    当然我也是通过官方推荐,使用下面命令去下载安装的,pip就是好用。。。

    pip install pycryptodome

    撸码开始

    废话不多说,直接上demo

    #AES-demo
    """
        @author: sy
    
        @file: python_AES.py
    
        @time: 2017/12/12 09:10
    
        @desc: AES加密
    """
    
    
    from Crypto.Cipher import AES
    #秘钥,此处需要将字符串转为字节
    key = b'abcdefgh'
    #加密内容需要长达16位字符,所以进行空格拼接
    def pad(text):
        while len(text) % 16 != 0:
            text += b' '
        return text
    #加密秘钥需要长达16位字符,所以进行空格拼接
    def pad_key(key):
        while len(key) % 16 != 0:
            key += b' '
        return key
    #进行加密算法,模式ECB模式,把叠加完16位的秘钥传进来
    aes = AES.new(pad_key(key), AES.MODE_ECB)
    #加密内容,此处需要将字符串转为字节
    text = b'woshijiamineirong'
    #进行内容拼接16位字符后传入加密类中,结果为字节类型
    encrypted_text = aes.encrypt(pad(text))
    print(encrypted_text)
    
    
    #此处是为了验证是否能将字节转为字符串后,进行解密成功
    #实际上a 就是 encrypted_text ,也就是加密后的内容
    a = b'\xb9K\xe8_.q\x1c!\x9f\xa2\xc8\x06\xf5\xc1\xd07'
    #用aes对象进行解密,将字节类型转为str类型,错误编码忽略不计
    de = str(aes.decrypt(a),encoding='utf-8',errors="ignore")
    #获取str从0开始到文本内容的字符串长度。
    print(de[:len(text)])

    结语

    关于AES的加密,在java上看到项目中有用到过,但是对于Python这一次算是初体验了…..也算长见识了….尴尬之处就是在于加密后的是字节形式的。。。。。。也有可能是我哪里写的有问题吧,若有的话,还望高人指出呀。。


    更好的文章AES请参考:http://blog.csdn.net/hh775313602/article/details/78991340
    后续修改文章请看:http://blog.csdn.net/s740556472/article/details/79026128 (AES python 加解密都有)

关键字