在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
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是一个加密算法库、是python的加密工具包。这是两个安全散列函数(如SHA256和RIPEMD160)以及各种加密算法(AES,DES,RSA,ElGamal等)的集合。
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加密例子:
>>> 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()方法进行解密。
>>> 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=='