安装PyCrypto库及其使用(Python3安装)

centeos安装python3

在centos6.7中已经默认安装了Python2.6了,所以python3.5.2需要单独安装,下面通过源码安装Python3

1.下载源码包到指定路径

wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

2.解压该源码包,这里解压到当前路径

tar  -zxvf Python-3.5.2.tgz

3.提前安装必要的辅助包

yum install -y gcc                   #gcc编译器
yum install openssl-devel      #安装SSL

4.进入解压后的Python352

  ./configure   #源码安装的第一步,默认安装

  make && make install   #编译、安装

 安装好后,pip、setuptools工具也会安装好了,可以通过pip3直接安装包了!!

5.测试安装

python3   ---》进入Python3

python/python2 ----》进入默认的python2

因为没有修改配置,所以需要python3才进入刚刚安装的python3

6.Python3代替Python2

查看环境变量,启动python时默认按照PATH的顺序进行查找,在/usr/bin中的python此时为Python2.6的。

# 备份python2
mv /usr/bin/python /usr/bin/python2.6
# 找出Python3安装路径:
which Python3
/usr/local/bin/python3
# 修改软连接,就ok了
ln -s /usr/local/python3 /usr/bin/python
 7. 升级完python之后,yum就不好用了,需要修改/usr/bin/yum,改为使用python2.6
#!/usr/bin/python2.6

安装PyCrypto库(加密算法库)

1.下载该python的软码包

wget https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz#md5=55a61a054aa66812daf5161a0d5d7eda

2.解压该包

tar  -zxvf  pycrypto-2.6.1.tar.gz

3.进入该包,通过python3 安装

python3  setup.py install

4.echo $? 确认安装过程是否出错

5.测试是否安装成功

[root@localhost pycrypto-2.6.1]# python3
Python 3.5.2 (default, Jan 18 2017, 08:40:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto.Hash import SHA256  #该包导入成功,则安装成功啦
>>> hash = SHA256.new()
>>> hash.update(b'123456')
>>> hash.digest()
b'\x8d\x96\x9e\xefn\xca\xd3\xc2\x9a:b\x92\x80\xe6\x86\xcf\x0c?]Z\x86\xaf\xf3\xca\x12\x02\x0c\x92:\xdcl\x92'
>>> hash.hexdigest()
'8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'

http://blog.csdn.net/zhihaoma/article/details/52385947

PyCrypto库

PyCrypto是一个加密算法库、是python的加密工具包。这是两个安全散列函数(如SHA256和RIPEMD160)以及各种加密算法(AES,DES,RSA,ElGamal等)的集合。

SHA-256模块

SHA-256算法属于密码SHA-2系列哈系列哈系。它产生了一个消息的256位摘要。哈希值用作表示大量数据的固定大小的唯一值。数据的少量更改会在哈希值中产生不可预知的大量更改。

SHA-256加密字符串:

>>> from Crypto.Hash import SHA256  #导进SHA256模块
>>> hash = SHA256.new()             
>>> hash.update(b'123456')           
>>> hash.digest()                  #使用digest()方法加密
b'\x8d\x96\x9e\xefn\xca\xd3\xc2\x9a:b\x92\x80\xe6\x86\xcf\x0c?]Z\x86\xaf\xf3\xca\x12\x02\x0c\x92:\xdcl\x92'
>>> hash.hexdigest()               #使用hexdigest()方法加密,该方法加密后是16进制的
'8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'

AES 高级加密标准

AES 加密注意点:

  • key长度必须是16、24、或32位;
  • VI长度只能是16位;
  • encrypt()方法要求被加密的字符串必须也是16、24或32位的长度;所以一般要对被加密串进行处理

AES加密例子:

>>> from Crypto.Cipher import AES
>>> jiami = AES.new('this is a key111',AES.MODE_CBC,'this is an iv222')
>>> string = 'admin123admin123'             #被加密的字符串必须16位啊
>>> ciphertext = jiami.encrypt(string)      #encrypt()对字符串进行加密
>>> ciphertext                              #经过加密后的字符串
b'Lz\xf7 \xc2\xe7\xcc\n\x07.\xb1T\tz\xb8\xb7'
>>> import base64           #上面的字符串太长了,实际使用中不方便传送,使用base64模块的urlsafe_b64encode()方法对AES加密字符串进行二次加密。
>>> aa = base64.urlsafe_b64encode(ciphertext)
>>> aa
b'THr3IMLnzAoHLrFUCXq4tw=='
对第一次加密的字符串解密:

>>> jiemi = AES.new('this is a key111',AES.MODE_CBC,'this is an iv222') #解密使用的key和IV必须是加密时使用的
>>> jiemi.decrypt(ciphertext)
b'admin123admin123'
解密时必须要知道加密时使用的key和IV,再通过decrypt()方法进行解密。

对被加密串进行处理,使其长度是16:

>>> BS = 16
>>> pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
>>> string = '12345'
>>> pad(string)
'12345\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b'
>>> len(pad(string))
16
函数式编程,通过lambda定义匿名函数来对字符串进行补足,使其长度变为16、24或32位。

通过上面的处理,任何一个不够16位的字符串都可以利用AES进行加密了。
结合函数式编程加密:

>>> from Crypto.Cipher import AES 
>>> jiami = AES.new('this is a key111',AES.MODE_CBC,'this is an iv222')
>>> string = '123'           #被加密字符串
>>> BS = 16
>>> pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
>>> ciphertext = jiami.encrypt(pad(string))  #使用pad()函数使不足16位的字符串补全
>>> ciphertext
b'\xe0\xce\x8c\x00\x99R&\xee\xb7D\xd4\xeb\xa9(:e'
>>> import base64                            #使用base64的urlsafe_b64encode()二次加密,便于传输
>>> aa = base64.urlsafe_b64encode(ciphertext)
>>> aa
b'4M6MAJlSJu63RNTrqSg6ZQ=='

















你可能感兴趣的:(python基础)