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

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

由于项目涉及到注册和登录,所以我了解一下现在app使用比较广泛的几种密码加密方法,可以当作参考,以下都是在python3.5的环境下使用这些算法的例子。


1.base64

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email、在XML中存储复杂数据。来源:

base64使用起来比较简单方便,但主要用途不是用来加密数据,即使用了数据的安全性也很低。

例子:

import base64s = '你好,世界!'s = s.encode("utf-8")s1 = base64.encodestring(s)s2 = base64.decodestring(s1).decode("utf-8")print("原始数据:",s2)print("base64:",s1)

结果:

1011927-20171111211309747-223496407.png

2.MD5

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由罗纳德·李维斯特设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 中被加以规范。来源:

MD5相对base64来说更加安全,但是加密之后就很难解密,无法获得原始数据。

例子:

import hashlibs = '你好,世界!'s = s.encode("utf-8")m = hashlib.md5()m.update(s)psw = m.hexdigest()print("md5:",psw)

结果:

1011927-20171111211320747-1102668022.png

3.bcrypt

bcrypt是一个由Niels Provos以及David Mazières根据Blowfish加密算法所设计的密码散列函数,于1999年在USENIX中展示。实现中bcrypt会使用一个加盐的流程以防御彩虹表攻击,同时bcrypt还是适应性函数,它可以借由增加迭代之次数来抵御日益增进的电脑运算能力通过暴力法破解。由bcrypt加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。然而,所提供的所有字符都具有十分重要的意义。密码越强大,您的数据就越安全。除了对您的数据进行加密,默认情况下,bcrypt在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设置禁用此功能。来源:

bcrypt的安全性比md5更好,因为在散列时引入了随机生成的盐(salt),使得每次生成的数据都不同。

例子:

import bcryptpaswd = "YUjun"password = paswd.encode("utf-8")hashed = bcrypt.hashpw(password,bcrypt.gensalt())print(password)print(hashed)if bcrypt.hashpw(password,hashed) == hashed:    print("It maches!")else:    print("It does not match:(")

结果:

1011927-20171111211336653-836437914.png

4.AES

高级加密标准(Advanced Encryption Standard,AES),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES只是个基本算法,实现AES有若干模式。其中的CBC模式因为其安全性而被TLS(就是https的加密标准)和IPSec(win采用的)作为技术标准。简单地说,CBC使用密码和salt(起扰乱作用)按固定算法(md5)产生key和iv。然后用key和iv(初始向量,加密第一块明文)加密(明文)和解密(密文)。来源:

AES是现在最流行的对称加密算法,安全性高且运行快。

例子:

from Crypto.Cipher import AESobj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')message = "The answer is no"ciphertext = obj.encrypt(message)print(ciphertext)obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')print(obj2.decrypt(ciphertext))

结果:

1011927-20171111211345997-1453086845.png

将key改为‘This is a key125’后:

1011927-20171111211525684-1482872809.png

注意:AES的key必须是16(AES-128)、24(AES-192)或32(AES-256)字节长。

转载于:https://www.cnblogs.com/yujohn/p/7820008.html

你可能感兴趣的文章
Docker环境搭建,K8s
查看>>
Python3爬虫(六) 解析库的使用之Beautiful Soup
查看>>
Python实例:11~20例
查看>>
ORACLE1.13-综合例子应用01
查看>>
js,同意后,才可已点击注册按钮
查看>>
MySQL check the manual that corresponds to your MySQL server version for the right syntax错误
查看>>
[学习总结]6、Android异步消息处理机制完全解析,带你从源码的角度彻底理解
查看>>
java内部类实现多继承
查看>>
python thread 多线程
查看>>
锁类型_ sys.dm_os_wait_stats
查看>>
AR2220 通过cpu-defend policy处理大量大量arp广播的小技巧
查看>>
android-studio于java相关
查看>>
Spring常用注解
查看>>
shell 倒引号
查看>>
伯仲叔季
查看>>
PHP——0128练习相关2——js点击button按钮跳转到另一个新页面
查看>>
ThreadLocal 解决多线程程序的并发问题+事务处理
查看>>
Codeforces Round #459 (Div. 2)题解
查看>>
Git中如何利用生成SSH个人公钥访问git仓库
查看>>
POJ 3280 Cheapest Palindrome(DP)
查看>>