【Python】 基于秘钥的对称加密
【Crypto】
关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash。但是还缺少一种明明场景很简单的解决方案,就是把利用一个秘钥,把一段明文加密然后用同一个秘钥可以把密文解密的这么一个简单的对称加密。
不信python会没有好的解决方案,就去网上找了一下。找到了利用Crypto这个模块来进行的。虽然安全性上python加密肯定不如静态语言加密的好,不过好歹有了一招比较像样的“防君子”之手段。
■ 使用
Crypto不是Python自带的模块,需要安装pip install pycrypto。另外在程序中还要用到binascii这个模块。这个模块在2.7中似乎已经是自带的了。
from Crypto.Cipher import AES
from binascii import a2b_hex,b2a_hex class Cryptor:
#创立一个加密解密用的类
def __init__(self,key):
self.key = self.modifyLength(key)
self.mode = AES.MODE_CBC def modifyLength(self,s):
length = len(s)
if length %16 == 0:
add = 0
else:
add = 16 - ( length % 16 )
return s + '\0' * add def encrypt(self,text):
text = self.modifyLength(text)
cryptor = AES.new(self.key,self.mode,b'')
rawText = cryptor.encrypt(text)
return b2a_hex(rawText)[0] def decrypt(self,text):
text = self.modifyLength(text)
cryptor = AES.new(self.key,self.mode,b'')
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rsplit('\0')[0]
上面这个类定义了四个方法,第二个方法modifyLength是将传入的字符串进行位数判断,如果不是16的整数倍则用'\0'(即空字符)补全到16的倍数位数比如32位64位等等。这些是AES加密要求的,它要求秘钥、被加密的字符串等位数都要是16位的整数倍的个数。
key自然是创建这个类对象时用的秘钥了,两个方法encrypt和decrypt分别用于加密和解密。加密后的数据是16进制的数据,如果直接用一些编码格式去编码解码的话可能会存在编解码失败的情况,如果想要避免,则可以在加密阶段的密文先做一个十六进制转二进制的处理,在这里用的就是binascii.b2a_hex方法。解密的时候同样记得调用a2b_hex这个方法。另外还需要注意的是解密后的内容要去除末尾的空字符(因用这个类加密时,原来的明文可能被末尾的空字符补充过)
【Python】 基于秘钥的对称加密的更多相关文章
- 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件
在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...
- 对称加密,非对称加密,数字签名,https
对称加密和非对称加密 对称加密 概念:加密秘钥和解密秘钥使用相同的秘钥(即加密和解密都必须使用同一个秘钥) 特点:一对一的双向保密通信(每一方既可用该秘钥加密,也可用该秘钥解密,非对称加密是多对一的单 ...
- TLS握手秘钥套件分析
1.为了弄清楚TLS1.3的内部结构,觉得有必要将TLS的整个结构从新整理一遍,方便后续在做握手协议的形式化分析的时候能够不遗漏每个加密和认证的的环节. TLS1.3不论文在协议内容上还是性能上都较之 ...
- Linux下SSH以及SSH秘钥
一.基于秘钥方式实现远程连接 第一步:创建密钥对(在管理端服务器上操作) 中间的输入项可以直接回车 ssh-keygen -t dsa 第二步:分发公钥(在管理端服务器执行) 这个步骤需要输入一个ye ...
- pyDes 实现 Python 版的 DES 对称加密/解密--转
https://my.oschina.net/leejun2005/blog/586451 手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓 ...
- 非对称加密 秘钥登录 https
非对称加密简介: 对称加密算法在加密和解密时使用的是同一个秘钥:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)私有密钥(private key,简 ...
- ZeroMQ接口函数之 :zmq_z85_encode – 使用Z85算法对一个二进制秘钥进行加密,输出可打印的文本
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq-z85-encode zmq_z85_encode(3) ØMQ Manual - ØMQ/4. ...
- java加密算法--MD5加密和哈希散列带秘钥加密算法源码
package com.ompa.common.utils; import java.security.MessageDigest; import java.security.NoSuchAlgori ...
- java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS
概述 java-信息安全(一)-BASE64,MD5,SHA,HMAC java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4 java-信息安全(四)-数据 ...
随机推荐
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法. swscale主 ...
- linux下insmod lsmod rmmod
insmod(install module) 功能说明:载入模块 install loadable kernel module 语法:insmod [-fkmpsvxX][-o <模块名称> ...
- Count:858org.apache.jasper.JasperException: Unable to compile class for JSP
1.错误描述 Count:858org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurre ...
- 多线程下不重复读取SQL Server 表的数据
在进行一些如发送短信.邮件的业务时,我们经常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送,发送完成后再将数据转移到历史表中,这样保证待发送表的数据一般情况下不会太 ...
- python实现列表倒叙打印
def func(listNode): listNode.reverse() for i in listNode: print(i) li = [1,2,3,4,5] func(li) 利用pytho ...
- freemarker基本数据类型(十一)
freemarker基本数据类型 1.基本数据类型 (1)字符串 (2)数字 (3)布尔值 (4)日期 2.展示示例 <html> <head> <meta http-e ...
- table问题汇总
平时要使用 table 的次数说多不多,说少不少,但每次使用必定会被几个问题"坑"一下,所以这篇博客用来记录下table那些"小坑".但 table 也会有很多 ...
- python基础练习题
购物车程序 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/3/6 21:01 # @Author : hyang # @Si ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- 【BZOJ1076】奖励关(动态规划,数学期望)
[BZOJ1076]奖励关(动态规划,数学期望) 题面 懒,粘地址 题解 我也是看了题解才会做 看着数据范围,很容易想到状压 然后,设\(f[i][j]\)表示当前第\(i\)轮,状态为\(j\)的期 ...