json、hashlib、base64
Python常用模块
一、json模块
1.json概述
json是一种基于文本,独立于语言的轻量级数据交换格式,以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象(键值对)。json其实就是一种文本格式,用来在不同的应用中传递数据
json字符串案例:
{"name":"志昊", "age": 18, "salary": 5000.5, "hobby": ["money", "girl"]}
特点:轻量级的文本数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成,Web世界当中最理想的数据交换格式
目前互联网开发前后端数据交互使用的基本都是json
2.语法规则
数据由键值对组成,键值对由逗号分隔
字符串一定要用双引号
python | json |
---|---|
字典 | 对象 |
列表 | 数组 |
字符串 | 字符串 |
int或float | 数字 |
True,False | true或false |
None | null |
3.json模块接口(json模块API)
json.dumps(obj) # 将python数据转化为json数据 json.loads(s) # 将json数据转化为python数据 json.dump(obj, fp) # 转换为json数据并保存在文件中 json.load(fp) # 从文件中读取json,并转化为python数据 ensure_ascii # 是否用ASCII解析 indent # 实现缩进 # ************************************************** obj:python数据 s:json数据 fp:函数别称 ensure_ascii、indent:仅仅在python转为json数据时可使用
4.代码案例
import json # json 格式的字符串 json_str = '{"name":"志昊", "age": 18, "salary": 5000.5, "hobby": ["money", "girl"]}' # 需求,改掉 name对应的值,为‘zhihao’ # json字符串 -> python object # json 字符串转换成 python中的数据类型 data = json.loads(json_str) # 转换成字典 print(data) print(type(data)) data['name'] = "zhihao" data['hobby'].append('跑') print(data['hobby'][-1]) print(data) # python object -> json 字符串 json_str = json.dumps(data, ensure_ascii=False, indent=4) # 非ASCII码解析,缩进为4 print(json_str) print(type(json_str)) ************************************************************** {'name': '志昊', 'age': 18, 'salary': 5000.5, 'hobby': ['money', 'girl']} <class 'dict'> 跑 {'name': 'zhihao', 'age': 18, 'salary': 5000.5, 'hobby': ['money', 'girl', '跑']} { "name": "zhihao", "age": 18, "salary": 5000.5, "hobby": [ "money", "girl", "跑" ] } <class 'str'>
student.json:"hello world" ************************************************************** import json with open("student.json", "r", encoding="utf-8") as f: # 只读方式打开 # json_str = f.read() # 读取数据存入json_str # data = json.loads(json_str) # 将json数据转为python数据 data = json.load(f) # 将"student.json"中json数据转为python数据 print(data) with open("new.json", "w", encoding="utf-8") as f: # 只写方式打开 # 将python数据转为json数据存入json_str # json_str = json.dumps(data, ensure_ascii=False, indent=4) # f.write(json_str) # 将json数据写入"new.json" # 将data转为json数据并写入到"new.json" json.dump(data, f, ensure_ascii=False, indent=4) ************************************************************** hello world student.json:"hello world" new.json:"hello world"
二、hashlib
1.数据安全
数据时代,为了保证数据的安全性,防止数据泄露,往往会对数据进行加密,加密是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后在用相同或者不同的手段还原(解密)
1.数据加密
- 对称加密:数据加密和解密的秘钥相同
- 非对称加密:加密和解密的秘钥不相同,公钥用于加密数据,私钥用于解密数据
- 单向加密:只能加密,不能解密(原则上,不属于加密)
2.hash
一种算法的名称,哈希,散列
它是把,任意长度的输入通过算法转变成固定长度的输出,该输出就是散列
特点:
-
不可逆:无法根据散列值来还原原来的数据
-
定长输出:无论输入的原始数据有多长,结果长度是相同的
-
抗修改性:输入的微小改变,哪怕只有一个字符,会引起结果的巨大改变
-
强碰撞性:很难找到两段内容不同的数据,使他们产生的hash值一致,几乎不可能
应用:
- 数据指纹
- 区块链
- 数据加密
2.hashlib模块的接口
提供了很多的hash算法,主要有:
- md5
- sha系列:sha1,sha224,sha256,sha384,sha512
api | 描述 |
---|---|
hashlib.Hash算法名(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 = "志昊" m = hashlib.md5(info.encode()) # 注意一定要转为二进制数 res1 = m.hexdigest() # 散列字符串 res2 = m.digest() # 二进制数据 print(m) print(res1) print(res2) ************************************************************** <md5 HASH object @ 0x0000024B158F5E40> 157383879fd8305e1592d6c08fe8e6a8 b'\x15s\x83\x87\x9f\xd80^\x15\x92\xd6\xc0\x8f\xe8\xe6\xa8'
import hashlib # 1.选择一种算法, 创建一个算法对象 m = hashlib.md5() # 2. 添加数据 m.update('志'.encode()) m.update('昊'.encode()) # 3.获取散列结果 res = m.hexdigest() print(res) ************************************************************** 157383879fd8305e1592d6c08fe8e6a8
大文件hash
one.wmv 为视频文件名 ************************************************************** # 使用hashlib hash 大文件 import hashlib # 1.创建算法对象 m = hashlib.md5() # 2.读取文件 with open('one.wmv', 'rb') as f: for line in f: m.update(line) res = m.hexdigest() print(res)
三、base64
1.概念
base64是一种用64个字符来表示任意二进制数据的方法,将二进制数转换成字符串。
特点:
-
用来将非ASCII字符的数据转换成ASCII字符的一种方法
-
常用于对URL的编码
-
可以将不可打印的二进制数据转化为可打印的字符串
用途:
- 二进制转文本便于网络传输
- 简单加密,不可见
2.原理
-
标准的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 = =
-
自定义base64编码
其实就是改变字符串数组的字符,和顺序
-
url safe 编码
Base64编码后的数据可能会含有 + / 两个符号,如果编码后的数据用于URL或文件的系统路径中,
就可能导致Bug,所以base模块提供了专门编码url的方法它将
+, /
替换成-,_
,并且去掉补齐的=
3.模块的接口
编码接受的是二进数据,返回的也是二进数据
解码接受的也是二进数据,返回的也是二进数据
api | 描述 |
---|---|
base64.b64encode(s) | 对二进制数据进行base64编码 |
base64.b64decode(s) | 对通过base64编码的数据进行解码 |
base64.urlsafe_b64encode(s) | 对URL进行base64编码 |
base64.urlsafe_b64decode(s) | 解码 |
4.代码案例
import base64 data = "a" res1 = base64.b64encode(data.encode()) # 编码 必须传入二进制数 print(res1) res2 = base64.b64decode(res1) # 解码 返回的是二进制数 print(res2) res2 = res2.decode("utf-8") # 二进制数转为"utf-8" # res2 = base64.b64decode(res1).decode("utf-8") #解码 print(res2) ************************************************************** b'YQ==' b'a' a
import base64 url = "https://www.python.org" res1 = base64.urlsafe_b64encode(url.encode()) # 编码 必须传入二进制数 print(res1) res2 = base64.urlsafe_b64decode(res1) # 解码 返回的是二进制数 print(res2) ************************************************************** b'aHR0cHM6Ly93d3cucHl0aG9uLm9yZw==' b'https://www.python.org'
import base64 url = b"\xfb\xff\xbf" # fbf可输出-_ res1 = base64.urlsafe_b64encode(url) # 编码 必须传入二进制数 print(res1) res2 = base64.urlsafe_b64decode(res1) # 解码 返回的是二进制数 print(res2) ************************************************************** b'-_-_' b'\xfb\xff\xbf'
- 点赞 1
- 收藏
- 分享
- 文章举报
- Python的 json 、 hashlib 、 Base64 模块
- Json,Hashlib,base64
- python中base64编码与解码(将json串转化成base64)
- 用Base64加密数据解决json传输数据中特殊字符问题
- javascript处理json/base64等数据并且下载成本地json/image文件(angular环境、execCommand)
- Python3 网络传输数据的处理(json / xml / base64)
- php解决aes,base64后的json字符串json_decode为null的问题
- json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式
- 用json在java和C#之间传递base64的问题。。。
- Servlet利用base64和json向客户端传输图片
- json dict python base64
- python:自定义函数、hashlib(md5、sha1)、base64
- PHP json_encode中文不转码 base64链接访问处理
- 写一个将一个String类型的json经过base64加密后解密转化成javaBean的工具类
- json传输二进制的方案(base64编码二进制)
- Python与json的转换, hashlib加密和 base64转码
- 网络请求到的json对象base64保存
- php的base64_decode有中文时出现不能json_decode
- 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密
- Python模块——HashLib与base64