zoukankan      html  css  js  c++  java
  • Python27中AES加密的安装以及使用

    Ums系统AES的加密使用

    AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数据分成多个4×4字节矩阵来处理,通过预先定义的密钥对每个字节矩阵中的每个字节进行异或、替换、移位以及线性变换操作来达到加密的目的。密钥长度可以是128,192或256比特。

    Python强大之处一是表现在语法简单,内容小巧,却可以实现复杂的程序功能;二是其优秀的跨平台能力,尤其涉及系统API调用时,统一封装为PythonAPI,我们所需要的仅仅是在运行机器上有Python解释器;三是丰富的库模块,使得我们可以使用Python实现多种多样的功能。所有的这一切,都使得我们摆脱程序开发时的细枝末节,而将重点放在程序逻辑和技术实现之上。我们准备使用Python来对一个文件进行AES加密,当然我们可以自己来实现这个加密函数(其实推荐C/C++的实现,因为速度快),但是我们完全可以调用现成的模块。这里我们使用的模块是PyCrypto。

    一、关于PyCrypto
      由于我们今天主要调用PyCrypto库来实现加密,所以这里还是稍微做些介绍吧!PyCrypto是一个免费的加密算法库,支持常见的DES、AES加密以及MD5、SHA各种HASH运算。我们可以在其官方主页下载最新版本:https://www.dlitz.net/software/pycrypto/,我编写程序时最新的是v2.6.1,下载之后得到一个zip的发布包,其中提供了setup.py文件,可以知道该程序包是使用Distutils分发的,基本的命令应该是:

    点击(此处)折叠或打开

    python setup.py build

    python setup.py install 

    使用模块准备:

    1.安装

    Pip install Crypto

    安装遇到的问题

    (1)python setup.py egg_info错误

    解决办法

    方法一:
    所有的问题出在certifi version conflict
    所以可以从https://pypi.python.org/pypi/certifi 中下载,然后install from source
    运行这句命令sudo python setup.py install 便可顺利解决此问题。
    或者可以直接卸载certifi 2016.2.28sudo pip uninstall certifi
    然后安装符合要求的certifi==2015.11.20。sudo pip install certifi==2015.11.20
    为避免产生RuntimeError: maximum recursion depth exceeded 的错误
    再更新distributepip install --upgrade distribute


    方法二:
    创建虚拟环境运行ipython

    >>>pip install virtualenv

    >>>virtualenv venv

    >>>source venv/bin/activate

    这时便已经进入了虚拟环境,现在便可使用pip install ipython 安装。
    当你想退出这个虚拟环境时,使用命令

    >>>deactivate

    (2)Microsoft Visual C++ 9.0 is required错误

       python27在运行setup.py安装时, 会默认寻找visual studio 2008来编译其中的C++文件。

      解决方法

    1.安装VS2008 所以需要运行
    SET VS90COMNTOOLS=%VS120COMNTOOLS% 改变配置。

    2.追加(如果你不想安装vs2008): 

    最终解决办法:

    安装Microsoft Visual C++ Compiler for Python 2.7

    二.使用模块

    将模块安装完成后,直接调用

    From Crypto.Cipher import AES

    还是报错

     ImportError: No module named Crypto.Cipher

    解决方法:

     Pip install pycrypto

    如果还是报错,则删除crypto,pycrypto后,再次安装pycrypto。

    补充,后面安装又碰到相同问题,上面的操作无法解决,甚至crypto模块内部代码都报这个错误,仔细检查,从安装目录查找 c:/python27/Lib/site-packages/crypto把crypto 改成Crypto

    附件样例

    from Crypto.Cipher import AES
    from binascii import b2a_hex,a2b_hex
    class MyCrypt():
        def __init__(self, key):
            self.key = key
            self.mode = AES.MODE_CBC
        def myencrypt(self, text):
            length = 16
            count = len(text)
            print count
            if count < length:
                add = length - count
                text= text + ('' * add)
            elif count > length:
                add = (length -(count % length))
                text= text + ('' * add)
            # print len(text)
            cryptor = AES.new(self.key, self.mode, b'0000000000000000')
            self.ciphertext = cryptor.encrypt(text)
            return b2a_hex(self.ciphertext)
    
        def mydecrypt(self, text):
            cryptor = AES.new(self.key, self.mode, b'0000000000000000')
            plain_text = cryptor.decrypt(a2b_hex(text))
            return plain_text.rstrip('')
    if __name__ == '__main__':
        mycrypt = MyCrypt('abcdefghjklmnopq')
        e = mycrypt.myencrypt('hello,world!')
        d = mycrypt.mydecrypt(e)
        print e
        print d
    输出结果:
            12
            51296b171cfb57262f16a9ce3b68ec31
            hello,world!
  • 相关阅读:
    day06.2-软链接与硬链接
    day06.1-磁盘管理
    day05.3-Linux进程管理
    day05.2-Vim编辑器
    day05.1-文件归档与压缩
    day04-Linux系统中用户控制及文件权限管理方法
    day03-Linux操作系统目录结构
    day02.2-常用Linux命令整理
    BST_traverse(中序遍历,前序遍历,后序遍历)
    JS_DOM_practice with Pokemon
  • 原文地址:https://www.cnblogs.com/zn0523/p/7093585.html
Copyright © 2011-2022 走看看