codes(简介)
python要做编码转换的时候,会借助于内部的编码(unicode)。
转换过程:原有编码 -> 内部编码 -> 目的编码。
codes(了解)
常用的编码
-
utf-8(默认)
-
gbk2312
-
ASCII
-
CP037(英文)
-
GB18030(中文)
-
CP949(韩文)
codes(参考代码)
编码 / 解码
import codecs
chinese = '水果:苹果,香蕉'
ch = codecs.encode(obj=chinese, encoding='GB18030')
# >>> b'\\xcb\\xae\\xb9\\xfb:\\xc6\\xbb\\xb9\\xfb,\\xcf\\xe3\\xbd\\xb6'
res = codecs.decode(obj=ch, encoding='GB18030')
# >>> 水果:苹果,香蕉
base64(简介)
小型或非重要数据加密
base64(了解)
组成:小写字母+大写字母+数字+其它(26+26+10+2)
| 字符对应表 | |
| 0~25 |
(A~Z) |
|
26~51 |
(a-z) |
|
52~61 |
(0-9) |
|
62~63 |
(+ /) |
base64(参考代码)
编码 / 解码
import base64
str = "Hello World".encode()
''' 编码 '''
bs4str = base64.b64encode(str)
print(bs4str)
# >>> b'SGVsbG8gV29ybGQ='
''' 解码 '''
rs = base64.b64decode(bs4str)
print(rs)
# >>> b'Hello World'
URL编码
import base64
''' URL编码 '''
src = "https://www.xxx.com/".encode("utf-8")
''' 对url进行编码 '''
urlstr = base64.urlsafe_b64encode(src)
''' 输出url编码后的字符串 '''
print(urlstr)
# >>> b'aHR0cHM6Ly93d3cueHh4LmNvbS8='
''' 还原编码后的字符串 '''
print(base64.urlsafe_b64decode(urlstr).decode("utf-8"))
# >>> https://www.xxx.com/
hashlib(简介)
不可逆加密
内容相同,密文一定相同。
加密过程:明文 - 字节 - 密文
hashlib(参考代码)
综合例子
import base64
import hmac
import hashlib
"""
注意:
hashlib 加密啊的字符串类型为二进制编码,
直接加密字符串会报如下错误
"""
'''##### md5 #####'''
string = "Hello World "
md5 = hashlib.md5()
md5.update(string.encode("utf-8")) # 注意转码
res = md5.hexdigest()
print("md5加密结果:", res)
# >>> md5加密结果: 1bbb8c1b1d7b04e7d172b39cf337a901
md5_cp = hashlib.md5()
md5_cp.update(bytes(string, encoding="utf-8"))
res = md5_cp.hexdigest()
print("md5加密结果:", res)
# >>> md5加密结果: 1bbb8c1b1d7b04e7d172b39cf337a901
'''##### sha1 #####'''
sha1 = hashlib.sha1()
sha1.update(string.encode("utf-8"))
res = sha1.hexdigest()
print("sha1加密结果:", res)
# >>> sha1加密结果: 053bebe714723f6bd76ba08f869ad8113a408d3e
'''##### sha256 #####'''
sha256 = hashlib.sha256()
sha256.update(string.encode("utf-8"))
res = sha256.hexdigest()
print("sha256加密结果:", res)
# >>> sha256加密结果: a2f63ad70f3e5c61e5eafa164e95cbe40c9689c304ddd9b74fddf4169e3e838b
'''##### sha384 #####'''
sha384 = hashlib.sha384()
sha384.update(string.encode("utf-8"))
res = sha384.hexdigest()
print("sha384加密结果:", res)
# >>> sha384加密结果: f70da671914621d376f60f9e94fb87cc55c1d232a73fa8a4e0cb7cbcb525191554ef83200da8af872e43516d20cb9edb
'''##### sha512 #####'''
sha512 = hashlib.sha512()
sha512.update(string.encode("utf-8"))
res = sha512.hexdigest()
print("sha512加密结果:", res)
# >>> sha512加密结果: 01aafd296fe18f9dce946a6538ed43686e1bc544cabdaf1fcb38a505b7a2b742ae20a9d3f7b7cf8731f0bc54bb3a512129d638b8e6a402363a4481ec3c2bfd54
'''##### 高级加密 #####'''
high = hashlib.md5(b"password")
high.update("abcdefg".encode("utf-8"))
rs2 = high.hexdigest()
print("采用key加密:", rs2)
# >>> 采用key加密: 5e1cb591af0fba3cbd637af40eaa4f64
rsa(简介)
公钥私钥加密
rsa(参考代码)
加密 / 解密
import rsa
''' 生成密钥:生成RSA公钥和秘钥 '''
(pubkey, privkey) = rsa.newkeys(1024)
''' 保存密钥(一个公钥一个私钥) '''
with open("public.pem", "w+") as f:
f.write(pubkey.save_pkcs1().decode())
with open("private.pem", "w+") as f:
f.write(privkey.save_pkcs1().decode())
''' 导入密钥 '''
with open("public.pem", "r") as f:
pubkey = rsa.PublicKey.load_pkcs1(f.read().encode())
with open("private.pem", "r") as f:
privkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
''' 明文 '''
message = "python"
''' 公钥对明文加密,得到密文 '''
crypto = rsa.encrypt(message.encode(), pubkey)
print("公钥加密处理后:", crypto)
''' 私钥对密文解密,得到明文 '''
message = rsa.decrypt(crypto, privkey).decode()
print("私钥对密文解密后:", message)
文章介绍了Python中编码转换(如UTF-8,GBK,ASCII等)的过程,以及Base64用于小型数据加密的基本原理和示例,还详细讲解了hashlib库中的MD5,SHA1,SHA256,SHA384,SHA512等哈希函数的使用,以及RSA公钥私钥加密的实现。

被折叠的 条评论
为什么被折叠?



