Python__模块(加密-综合)__codes / base64 / hashlib / rsa

文章介绍了Python中编码转换(如UTF-8,GBK,ASCII等)的过程,以及Base64用于小型数据加密的基本原理和示例,还详细讲解了hashlib库中的MD5,SHA1,SHA256,SHA384,SHA512等哈希函数的使用,以及RSA公钥私钥加密的实现。

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)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值