前言
数字化时代下,数据安全是各大公司及个人最关心的一点,作为一个Python语言使用者我们该如何进行数据的加密呢?本文二哥领着大家来了解一下。
目录
前言
一、数据加密的概念
二、直接编码加密
三、Binascii编码加密
三、Base64编码加密
四、URL编码加密
五、Hashlib加密
1、MD5
2、SHA1加密
六、Hmac加密
七、PyCryptodome加密
一、数据加密的概念
数据加密的概念如下:
数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。
数据加密仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现信息隐蔽,从而起到保护信息的安全的作用。
在计算机中,我们通常都是对二进制编码的格式进行加密,在用Python进行加密的时候我们通常使用的手段就是对原数据进行各种类型的编码。
二、直接编码加密
简介
在Python提供了encode和decode作为编码器和译码器,我们直接使用encode就可以起到加密的效果。
加密方式
\x :16进制。
代码示例
# 代码
str1 = '这是个秘密'
estr = str1.encode('utf8')
print(ustr)
dstr = estr.decode('utf8')
print(dstr)
# 输出
b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xaa\xe7\xa7\x98\xe5\xaf\x86'
这是个秘密
三、Binascii编码加密
简介
在使用Python自带的encode方法进行数据加密的时候,很明显的可以看出加密后的内容是16进制的结果,此时使用Binascii模块我们可以将直接encode编码后的结果做进一步的优化。
加密方式
Binascii中提供了两个重要的函数:
- b2a_hex :将encode后的编码进行优化。
- a2b_hex :将优化后的编码回退成encode编码。
代码示例
# 代码
str1 = '这是个秘密'
estr = str1.encode('utf8')
print(ustr)
dstr = estr.decode('utf8')
print(dstr)
import binascii
b2a = binascii.b2a_hex(estr)
print(b2a)
a2b = binascii.a2b_hex(b2a)
print(a2b)
# 输出
b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xaa\xe7\xa7\x98\xe5\xaf\x86'
这是个秘密
b'e8bf99e698afe4b8aae7a798e5af86'
b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\xaa\xe7\xa7\x98\xe5\xaf\x86'
三、Base64编码加密
简介
Base64模块会使用65个字符(计算机从0开始计数)来表示任意的二进制数据。
加密方式
65个字符 :(A~Z a~z 0~9 + / =)
代码示例
# 代码
import base64
str1 = b'It\'s a secret'
b64_estr = base64.b64encode(str1)
print(b64_str)
b64_dstr = base64.b64decode(b64_estr)
print(b64_dstr)
# 输出
b'aGVsbG8='
b"It's a secret"
四、URL编码加密
简介
通常我们看到的网页信息中是不会包含中文及特殊字符的,URL编码就是起到了此类的作用。
加密方式
将超出ASCII范围的字符转换成十六进制。
代码示例
# 代码
import urllib
str1 = '这是个秘密'
estr = urllib.parse.quote(str1)
print(estr)
dstr = urllib.parse.unquote(estr)
print(dstr)
# 输出
%E8%BF%99%E6%98%AF%E4%B8%AA%E7%A7%98%E5%AF%86
这是个秘密
五、Hashlib加密
1、MD5
简介
我们熟知的MD5加密(信息-摘要算法)在Python3中使用Hashlib模块进行操作,关于该算法的原理,我们可以简单的理解为:通过一个函数,把任意长度的数据转换为一个长度固定的数据串。
加密方式
通常用16进制的字符串表示。
性质
- 不可逆性:MD5加密是一种散列函数(哈希函数),他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程。
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 抗碰撞性:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
代码示例
# 代码
import hashlib
str1 = '这是个秘密'
# encode加密方式
hl = hashlib.md5()
hl.update(str1.encode('utf8'))
hash1 = hl.hexdigest()
print(hash1)
# 双层加密
'''
如果没有参数,所以md5遵守一个规则,生成同一个对应关系,如果加了参数,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,
因为别人永远拿不到这个参数
'''
h2 = hashlib.md5(bytes(str1, encoding='utf8'))
hash2 = h2.hexdigest()
print(hash2)
h2.update(bytes(str1, encoding='utf8'))
print(h2.hexdigest())
# 输出
ccabfe6517601612d67090e0a5553298
ccabfe6517601612d67090e0a5553298
939fe93415c6a8d0a4f5b5b8bb9e1dcb
注:我们很多下载文件内容的命名就是md5加密后的结果。
2、SHA1加密
简介
sha1算法是基于MD5的一种加密算法,加密后的数据长度会比MD5更长,但是效率也会变的更慢。
代码示例
# 代码
import hashlib
str1 = "这是个秘密"
S1 = hashlib.sha1(str1.encode("utf-8")).hexdigest()
print(S1)
# 输出
23ef694ec95931e499bc98783bce30687304aa0c
六、Hmac加密
简介
和hashlib一样,Hmac也是基于哈希算法的一种加密方式,并且Hmac提供的API和hashlib基本一致。
代码示例
# 代码
import hmac
str1 = '这是个秘密'
# new中需要传入一个密钥
hl = hmac.new(b'key')
hl.update(str1.encode('utf8'))
hash1 = hl.hexdigest()
print(hash1)
# 输出
e5530035642465913334be1620943182
七、PyCryptodome加密
简介
最出名的Python密码学第三方软件包PyCrypto于2013年停止更新了,随之时间推移该项目的一个分支PyCryptodome已经将PyCrypto进行了替代。
PyCryptodome加密主页
关于PyCryptodome的安装和使用在不同的系统及版本上有不同的操作,想了解PyCryptodome的读者可以移步主页进行了解。
https://www.pycryptodome.org/en/latest/src/introduction.html