博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据加密相关
阅读量:5024 次
发布时间:2019-06-12

本文共 2814 字,大约阅读时间需要 9 分钟。

最近,接了一个关于数据加密的任务,感觉挺高大上的,就这样网上海搜了一通,各种加密算法就出来了,听过的,没听过得,一时间不知道该用哪一种算法了,有种挑花眼的感觉,最后看到有一个ASE的加密算法看见还不错,so咱们就先聊聊这方面的问题吧

ASE

AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。

AES加解密的流程图如下:

python中使用pycrypto模块来完成数据的加密过程

#coding: utf8import sysfrom Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex class prpcrypt():    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)        #这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用        length = 16        count = len(text)        add = length - (count % length)        text = text + ('\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('\0') if __name__ == '__main__':    pc = prpcrypt('keyskeyskeyskeys')      #初始化密钥    e = pc.encrypt("00000")    d = pc.decrypt(e)                         print e, d    e = pc.encrypt("00000000000000000000000000")    d = pc.decrypt(e)                      print e, d

Hashlib

其中 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等接口,下面我们就以其中最常用的 MD5加密算法为例来分析一下加密过程。

import hashlibhash = hashlib.md5()#创建hash对象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一个128位的密文hash.update(bytes('admin', encoding='utf-8'))#以字符串参数更新哈希对象print(hash.hexdigest())#返回十六进制数字字符串print(hash.digest())#返回二进制数字字符串

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

import hashlibhash = hashlib.md5(bytes('898oaFs09f', encoding="utf-8"))hash.update(bytes('admin', encoding="utf-8"))print(hash.hexdigest())

base64

Base64是网络上最常见的用于传输8Bit的编码方式之一,当然也可以用来加密一些信息。Base64编码,64指A-Z、a-z、0-9、+和/这64个字符,还有“=”号不属于编码字符,而是填充字符。这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文。

import base64s1 = base64.encodestring('hello world')s2 = base64.decodestring(s1)print s1print s2aGVsbG8gd29ybGQ=hello world

crypt

crypt 模块(只用于 Unix/Linux,windows平台上没有此模块)实现了单向的 DES 加密, Unix/Linx系统使用这个加密算法来储存密码,这个模块真正也就只在检查这样的密码时有用

>>> import crypt>>> import random>>> import string>>> chars = string.digits + string.letters>>> chars'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'>>> def getsalt(chars):...     return random.choice(chars) + random.choice(chars)... >>> salt = getsalt(chars)>>> salt'sb'>>> msg = crypt.crypt('hello,world!',salt)>>> msg'sb0xvR6UbZsqw'

后面我们将会持续更新一些其他的常用算法,以便以后大家方便学习

 

转载于:https://www.cnblogs.com/luxiaojun/p/6198541.html

你可能感兴趣的文章
Hive时间函数笔记
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>
[HIHO1149]回文字符序列(dp)
查看>>
[HDU1402]A * B Problem Plus(FFT)
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
逆时针旋转的矩阵变换
查看>>
第10周15/16/17
查看>>
【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
linux支持FTP和SFTP服务【1】
查看>>
树的递归与非递归遍历方法
查看>>
每天一个Linux命令(6):rmdir命令
查看>>
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>