python学习笔记 模块 json hashlib base64

python常用模块

一,json

json概述:

json其实就是一种文本格式, 用来在不同的应用中传输数据。

json字符串案例:

{"name": "233", "age": 18, "salary": 5000.5, "hoddy": ["money", "girl"]}

语法规则

字符串一定要用双引号

python json
字典 对象
列表 数组
字符串 字符串
int或float 数字
Ture,False true或flase
None null

json模块接口

json.dumps(obj)    #将python数据转化为json
json.loads(s)      #将json数据转换为python的数据
json.dump(obj, fp) #转换为json并保存到文件中
json.load(fp)      #从文件中读取json,并转化为python数据

代码案例

import json
# json 格式的字符串
json_str = '{"name":"源氏", "age": 18, "salary": 5000.5, "hobby": ["money", "girl"]}'
# 需求,改掉 name对应的值,为‘xinlan’
# json字符串 -> python object
# json 字符串转换成 python中的数据类型
data = json.loads(json_str)     # 转换成字典
# print(data)
data['name'] = 'xinlan'
data['hobby'].append('慢跑')
# print(data['hobby'][-1])
# print(data)
# python object -> json 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=1)
print(json_str)
print(type(json_str))

二,hashlib

1.数据安全

数据加密

  • 对称加密:数据加密和解密的密钥相同
  • 非对称加密:加密和解密的密钥不同
  • 单向加密:只能加密,不能解密(原则上不属于加密)

hash(一种算法的名称 ,哈希 ,散列)

它是把 ,任意长度的输入通过算法转变成固定长度的输出 , 该输出就是散列

特点:不可逆 ,定常输出 ,抗修改性 ,强碰撞性

应用:数据指纹 , 区块链 ,数据加密

2.hashlib接口

提供了很多的hash算法 , 主要有:

  1. md5
  2. sha系列:sha1 , sha224 , sha256 , sha384 , sha512
api 描述
hashlib.new(name, data=b”) 生成一个hash对象
hashlib.hash算法名(data=b”) 生成一个使用该算法的hash对象
Hash对象.update(arg=None) 更新hash对象
Hash对象.digest() 返回Hash算法计算得到的值(bytes类型)
Hash对象.hexdigest() 返回Hash算法计算得到的值(str类型**)**

3.代码案例

# 使用hashlib
import hashlib
info = '沙x比x'
m = hashlib.md5(info.encode())     # 注意一定要传递二进制数
res1 = m.hexdigest()                # 散列字符串
res2 = m.digest()                   # 二进制数据
print(res1)
print(res2)
import hashlib
info = '沙x比x最帅!'
# 1.选择一种算法, 创建一个算法对象
m = hashlib.md5()   
# 2. 添加数据
m.update('沙x比x'.encode())
m.update('最帅!'.encode())
# 3.获取散列结果
res = m.hexdigest()
print(res)

大文件hash

# 使用hashlib  hash 大文件
import hashlib
# 1.创建算法对象
m = hashlib.md5()
# 2.读取文件
with open('json.wmv', 'rb') as f:
    for line in f:
        m.update(line)

res = m.hexdigest()
print(res)

三, base64

1.概念

base64是一种斑马方式 , 将二进制数转化为字符串的方法

用途:

  1. 二进制转文本便于网路传输
  2. 简单加密 , 不可见

2.原理

  1. 标准的base64编码

    首先准备一个包含64个字符的数组:

    ['A', 'B',...,'a', 'b',...'0', '1',...'9', '+', '/']

    对二进制数据进行梳理,每3个字节为一组,一共就是3*8=24位,划分成4组,每组刚好6位

    然后将6位二进制数转换成10进制数,得到4个索引,然后查表,获得相应的4个字符,就是编码后的字符串。

    如果要编码的二进制数长度不是3的倍数,最后会剩下 1,或者2个字节,就是用\x00再末尾补充

    再到编码末尾加上1到2个=号,表示补了多少个字节,解码的时候,会自动去掉。

    ‘a’ 01100001 00000000 00000000

    011000 010000 000000 000000

    24 16 0 0

    Y Q = =

  2. 自定义base64编码

    其实就是改变字符串数组的字符,和顺序

  3. url safe 编码

    对url进行base64编码。标准的base64中,+, / 不能直接作为url参数,所以有又出现一种,url safe base64编码。

    它将+, / 替换成 -,_,并且去掉补齐的=

3.模块的接口

编码接受的是二进数据,返回的也是二进数据

解码接受的也是二进数据,返回的也是二进数据

base64.b64encode(s)	        #对二进制数据进行base64编码
base64.b64decode(s)	        #对通过base64编码的数据进行解码
base64.urlsafe_b64encode(s)	#对URL进行base64编码
base64.urlsafe_b64decode(s) #对URL进行base64解码

4.代码案例

import base64
data = '2b桑'
res = base64.b64encode(data.encode())           # 编码  需要传入二进制数
res2 = base64.b64decode(res)
res2 = res2.decode('utf-8')                    # 解码  返回的是二进制数
print(res)
print(res2)

你可能感兴趣的:(python)