1 Python27 安装crypto

Windows安装

在Windows上安装的时候直接 pip install pycrypto会报错,参考:http://blog.csdn.net/teloy1989/article/details/72862108

2.安装 Microsoft Visual C++ 9.0
由于直接安装安装Crypto模块 会报错如下:因此需要先安装Microsoft Visual C++ 9.0 2.1 进入下载网址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266,直接下载后点击安装

下载的软件是VCForPython27.msi,安装好后,pip install pycrypto

2 解决Python27的编码错误

1 设置代码的格式

# -*- coding: utf-8 -*-

import sys

reload(sys)
sys.setdefaultencoding('utf-8')

2 解密的时候遇到问题

Python2切片无法知己获取字节的值,获取的是hex 16进制,查询16进制转换10进制的时候,用 binascii.a2b_hex报错

下面自己先获取到最后添加的值,把最后的最编码成utf8,再编码成hex,结果就是hex的字符串,自己写的hexstring2int函数,直接把相应的值转换成数字

    a_end_bytes = result[-1]  # 获取到的最后一个数值
temp_vlue = a_end_bytes.encode('utf-8') # 加密的时候 把字节解码成字符串 在这里重新编码成utf-8
num_value = temp_vlue.encode('hex') # 将获取到的字符串转换成数字
res = hexstring2int(num_value) # 将hex转换成数字
data = result[0:-res] # 获取真实的内容
# -*- coding: utf-8 -*-

import sys

reload(sys)
sys.setdefaultencoding('utf-8') from Crypto.Cipher import AES def hexstring2int(code):
if code == '01':
return 1
elif code == '02':
return 2
elif code == '03':
return 3
elif code == '04':
return 4
elif code == '05':
return 5
elif code == '06':
return 6
elif code == '07':
return 7
elif code == '08':
return 8
elif code == '09':
return 9
elif code == '0a':
return 10
elif code == '0b':
return 11
elif code == '0c':
return 12
elif code == '0d':
return 13
elif code == '0e':
return 14
elif code == '0f':
return 15
elif code == '10':
return 16 def encrypt(message):
key = b'jlaksdflj77asdfh' # 16个字节或16字节的倍数
cipher = AES.new(key, AES.MODE_CBC, key)
byte_data = bytearray(message, encoding='utf8') # 想要动态修改字节,用bytearray 相当于把字节转换成一个数组
v1 = len(byte_data) # 这是要加密的数据的长度 21
v2 = v1 % 16 # 取余 5
if v2 == 0:
v3 = 16
else:
v3 = 16 - v2 # 这是要补足的数 11 : 21+11=32 是16的倍数
for i in range(v3):
byte_data.append(v3)
final_data = byte_data.decode('utf-8') # 把字节解码成字符串
msg = cipher.encrypt(final_data) # 进行加密 final_data必须是16个字节或16字节的倍数
return msg # ############## 解密 ##############
def decrypt(msg):
key = b'jlaksdflj77asdfh' # 需要同样的key 6个字节或16字节的倍数
cipher = AES.new(key, AES.MODE_CBC, key)
result = cipher.decrypt(msg) # 对字节进行解密
a_end_bytes = result[-1] # 获取到的最后一个数值
temp_vlue = a_end_bytes.encode('utf-8') # 加密的时候 把字节解码成字符串 在这里重新编码成utf-8
num_value = temp_vlue.encode('hex') # 将获取到的字符串转换成数字
res = hexstring2int(num_value) # 将hex转换成数字
data = result[0:-res] # 获取真实的内容
return data if __name__ == '__main__':
msg = encrypt(u"哈哈哈")
data = decrypt(msg)
print data

参考:

https://www.cnblogs.com/japhasiac/p/7739846.html

python2.7 加密模块 解决各种坑的更多相关文章

  1. Android WebView中那些不得不解决的坑~~

    前面那张hybrid开发心得 有人问 怎么解决不用onJsPrompt 来回调js函数的问题.其实很简单,就是在在你的jscalljava回调函数内 另外开个线程去load js代码即可: wb.po ...

  2. python3和Python2的区别(被坑太久了)

    print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...

  3. Linux下安装pip(遇到了python2.6升级为python2.7道路上的坑,原因已经找到,只差临门一脚了,以后补上)

    1.先说一下什么是pippip 是“A tool for installing and managing Python packages.”,也就是说pip是python的软件安装工具2.下面介绍怎么 ...

  4. Mac SublimeREPL 插件安装使用及解决各种坑

    虽然网上教程一大堆,然而都不全面,遇到的各种坑的情况都没写. 一.安装 前提是你安装了Package Control,见Mac Sublime Text 3 配置Python环境及安装插件 Prefe ...

  5. Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...

  6. 升级python2至python3解决依赖关系

    1.最小化安装centos7,在升级python3的时候会出现很多包未安装,为解决依赖关系: yum -y install gcc gcc-c++ zlib zlib-devel libffi-dev ...

  7. Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑(二)

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...

  8. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  9. pcap支持Python2.7.8解决办法

    pcap库只支持到python2.5. pip install pcap在python2.7.8找不到. 只需要将网盘的2个文件放到python安装目录下lib/site-package文件夹即可 链 ...

随机推荐

  1. 用NaviCat创建存储过程批量添加测试数据

    打开navicat连接上数据库,然后打开左上角函数,新建一个函数. BEGIN DECLARE i int; --声明变量 DECLARE groupid int; set i=LAST_INSERT ...

  2. 美团Linux运维工程师面试真题

    1.LINUX系统软件安装和卸载的常见方法 答: A.rpm包卸载:rpm -e XXX.rpm   (如果想忽略依赖,可加上–nodeps) B.yum remove xxx.rpm  这种方法非常 ...

  3. ORACLE 12.2 RAC TNS-12520 遭遇连接风爆 (connection storm)

    故障现象:数据库迁移到新环境刚过两天.今天生产核心数,断断继续的告警连接不上.这是问题! 如理思路:1.查看alert日志,日志无报错                  2.查看连接数,参数设置的20 ...

  4. java编程--03介绍关于日期常用的计算

    /** * 获取2个日期之间的天数差 * d2-d1 * @return * @throws Exception * @Description: */ public static int getDif ...

  5. 宋宝华: 关于Linux进程优先级数字混乱的彻底澄清

    宋宝华: 关于Linux进程优先级数字混乱的彻底澄清 原创: 宋宝华 Linux阅码场 9月20日 https://mp.weixin.qq.com/s/44Gamu17Vkl77OGV2KkRmQ ...

  6. [转]将input file的选择的文件清空

    本文转自:http://hi.baidu.com/xiongshihu/item/125c79b47632e794194697f5 上传文件时,选择了文件后想清空文件路径的两种办法: JS代码 < ...

  7. eclipse中使用git下载项目

    准备工作: 目的:从远程仓库github上down所需的项目 eclipse使用git插件下载github上项目 eclipse版本:eclipse4.5  64位 jdk版本:jdk-1.7 64位 ...

  8. OpenCV细化算法简单解析

    细化算法它的原理也很简单: 我们对一副二值图像进行骨架提取,就是删除不需要的轮廓点,只保留其骨架点.假设一个像素点,我们定义该点为p1,则它的八邻域点p2->p9位置如下图所示,该算法考虑p1点 ...

  9. stm32 窗口看门狗学习(二)

    窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...

  10. Nginx主主负载均衡架构

    在和一些朋友交流Nginx+Keepalived技术时,我虽然已成功多次实Nginx+Keepaived项目方案,但这些都是用的单主Nginx在工作,从Nginx长期只是处于备份状态,所以我们想将二台 ...