之前写接口一般不用加密(做了权限处理),最近公司要求接口加密,我开始了入坑之路

  因为公司其他人用的AES和DES加密,我就在网上查了下关于这方面的使用方法。

  首先安装Crypto

  pip install Crypto

  安装成功,但是这个包是1.4.1根本不支持python3.6版本,

  然后就下载pycrypto:pip install pycrypto,但是报错(需要安装visual C++ 2015 14.0版本),感觉麻烦就没弄。。

  之后就网上下载pycrypto的包,将里面的Crypto放到C:\Python36\Lib\site-packages,网上找了一下代码,测试

  from Crypto.Cipher import AES这一块会报错,在源码中有一个import _AES(DES有一个import _DES),死活不行。。
  
  接下来各种捣鼓,各种版本都是import那一块出错,实在不行,安装c++库,安完提示已安装c++其它版本,终止安装。。(这个时候心态已经崩了),   !!!重点来了!   接下来我在知乎上发布帖子,希望得到回复,有一个办法回复:安装Anaconda,自带 Crypto,网上查了下600多m,有点大,,,
  就逛知乎,无意间看到。。pycryptodome模块,对,就是它,用pip安装,C:\Python36\Lib\site-package目录下就会有Crypto文件夹,
  试了下代码,没有import错误   之后,执行了下代码
#!/usr/bin/env python
#! usr/bin/python
# coding: utf8
import os,django
from django.conf import settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tuling.settings")# project_name 项目名称
django.setup()
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class Prpcrypt():
"""AES加密,采用CBC模式,这里key和iv值一样"""
def __init__(self, key):
self.key = key
self.mode = AES.MODE_CBC
# 加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
def encrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.key)#cryptor = AES.new(key,mode,iv)#
# 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用
length = 16
count = len(text)
if (count % length != 0):
add = length - (count % length)
else:
add = 0
text = text + (b'\0' * add)
self.ciphertext = cryptor.encrypt(text)
# 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
# 所以这里统一把加密后的字符串转化为16进制字符串
return b2a_hex(self.ciphertext)
# 解密后,去掉补足的空格用strip() 去掉
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.key)
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip(b'\0')
pc = Prpcrypt(settings.AES_KEY.encode()) # 初始化密钥
# e = pc.encrypt(b'0123456789ABCDEF')#加密
# d = pc.decrypt(e) #解密
# print(e.decode())
# print(d.decode())

  这个模块要在字符串前加b,不然会报错。

  参考:https://blog.csdn.net/nurke/article/details/77267081

  http://cakin24.iteye.com/blog/2384909

  https://blog.csdn.net/s740556472/article/details/78778522

整理一下关于Crypto加密的坑的更多相关文章

  1. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  2. Python3安装Crypto加密包

    Python3安装Crypto加密包 下载链接 加密包地址 步骤 下载加密包,解压加密包到Python安装目录下Lib\site-packages目录中,尝试在Pycharm中导入 from Cryp ...

  3. AES加密 C++调用Crypto++加密库 样例

    这阵子写了一些数据加密的小程序,对照了好几种算法后,选择了AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES).听这名字就非常厉害的样子 预计会搜索到这 ...

  4. nodeJS之crypto加密

    前面的话 加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法.也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 ...

  5. Crypto加密解密

    crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...

  6. Python爬虫使用MD5加密的坑

    由于公司的业务需要,需要爬取很多的国外网站图片,然后兄弟我一路正则杀过去,总共匹配到658张链接,心里美滋滋开始写下载的代码.然后就有了这次坑的记录. 首先这是我查到的链接数量 然后爬虫跑完后,美滋滋 ...

  7. 用Java实现AES加密(坑!)

    大坑!使用SecureRandom默认的加密方式即SHA1PRNG生成的密码有误,即使使用相同的password来生成,不同runtime或时刻生成的随机密码也有可能不同,造成的错误为javax.cr ...

  8. Crypto 加密解密

    import binascii from Crypto.Cipher import AES #秘钥,此处需要将字符串转为字节 from utils import config from utils.e ...

  9. python Crypto 加密解密

    本片文字记录使用python 的Crypto 工具对图片或者文本进行加密解密的方法: import numpy as np from PIL import Image from base64 impo ...

随机推荐

  1. Azure 上SQL Database(PaaS)Time Zone时区问题处理(进阶篇)

    通常ISV在面对本地客户时对时间相关的处理,一般都时区信息都是不敏感的.但是现在云的世界里为了让大家把时间处理的方式统一起来,云上的服务都是以UTC时间为准的,现在如果作为一个ISV来说就算你面对的客 ...

  2. 彻底搞懂 SQLAlchemy中的 backref

    教程源码截取: class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) name = Colum ...

  3. linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime

    time()提供了秒级的精确度 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒 ...

  4. 博世传感器调试笔记(二)加速度及陀螺仪传感器BMI160

    一.功能参数简介bosch Sensortec公司推出的最新BMI160惯性测量单元将最顶尖的16位3轴超低重力加速度计和超低功耗3轴陀螺仪集成于单一封装.MI160采用14管脚LGA封装,尺寸为2. ...

  5. MySQL学习(一)——Java连接MySql数据库

    MySQL学习(一)——Java连接MySql数据库 API详解: 获得语句执行 String sql = "Insert into category(cid, cname) values( ...

  6. 简明python教程笔记

    自然字符串 如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串.自然字符串通过给字符串加上前缀r或R来指定. r"Newlines are indicate ...

  7. Spring Boot后台启动不打印nohup.out

    #!/bin/bashnohup java -jar websocket-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod --serve ...

  8. 学号20155308 2016-2017-2 《Java程序设计》第6周学习总结

    学号20155308 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入与输出 目的:文件的读写:网络上传数据的基础:同样要掌握父类中方法. 10. ...

  9. Spring Aop、拦截器、过滤器的区别

    Filter过滤器:拦截web访问url地址.Interceptor拦截器:拦截以 .action结尾的url,拦截Action的访问.Spring AOP拦截器:只能拦截Spring管理Bean的访 ...

  10. vue、入门

    入门vue v-on:click:chang   绑定事件点击 生面周期,整个vue的执行过程,他的应用执行了生面周期,也就是执行过程,这个执行过程如下图表,我们可以参考下图,也可以访问官方网址:ht ...