2018-11-13常用模块 Json base64 hashl

2018-11-16  本文已影响0人  太阳出来我爬山坡

JSON 常用的前后台数据交互格式一

  1. json 数据 就是遵循一种格式的数据.文本数据
    json数据就是个字符串 可以表示 python中的数据
    javascript 用户交互 对象 可以用json数据表示
    语法规范:
    -数据胡键值对组成
    -键值对由逗号分隔
    -大括号保存对象(字典)
    -中括号保存对象(例表,无组)
    -字符串必须用双引号(")
    ***值的类型:字符串,数字,true ,false,null,数据,对象(js)
    python数据类型 VS json格式
    字典 对象
    列表或元组 数组
    字符串 字符串
    int 或float 数字
    True 或False true false
    None null

python 中利用json模块来转换数据类型 与 json字符串
json模块的方法:
1.json 数据 ---> python数据
json.loads("字符串") --->转换成 python数据.
json.load('json文件')---->转换成python数据.
2.python数据---->转换成json 数据
json.dumps(obj) --->转换成json数据
json.dump(ojb,f) ---->转换成json文件

常见 转换 报错(转换的内容不符合json 的要求)

JSONDecodeError: Expecting value: line 1 column 1 (char 0)
例 ss = ' True'
print(json.loads(ss)) 会报错!!!!
ss = "[1,2,23,4]" 或 ss ='{"key":123}' 或 ss = ' "aldjflaf123" '就不会.


'''# json字符串转换成 python数据.
ss = "null"
res = json.loads(ss)
print(res)
'''
结果: None

'''# json字符串转换成 python数据.
ss = "true"
res = json.loads(ss)
print(res)
'''
结果: True

base64 模块

1.用文本(ascII 字符)来表示二进制数
一个byte字节为8位 base64 把字节 划分成 6位段 2的6次方= 64
64个字母来表示 A-Z a-z 0-9 + /
A =0 Z =25 a=26 z =51 0=52 9=61 +=62 /=63
b'abc' 字节类型的abc 用二进制表示:
01100001 01100010 01100011 (24位) abc
011000 010110 001001 100011 (4个6位) Y W J j

***base64编码后, + / 在url中,不行的. + /在url 中是特殊符合
如果要对url 进行编码,用专门的安全的url编码
本质 上就是将 + 和 / 用 - _取代 url 重算时 使用 base64.urlsafe_b64encode(url)
虽然64 ascii 可以自定义
base64不是加密算法
把小图片编码成base64

hashlib 模块

数据安全
加密,密码,锁,算法.
加密分类
-对称加密 :数据的加密和解密用相同的密钥
-非对称加密:加密和解密用不同的密钥,公钥用于数据加密,私钥用于解密
-单向加密:只能加密,不能解密
Hash "散列" ,摘要算法.
任意长度 的输入通过散列算法变换成固定长度的输出.压缩,有损的
特点:
-不可逆
-定长输出(输入不变,输出不变)
-抗修改性(输入的微小变化,哪怕只是一个bit位的修改,引起巨大的变化)
-强碰撞性:很难找到 两段不同的数据 ,使他们的hash值相等,几乎不可能

hashlib 的常用方法
md5 32位
防止篡改 电影母盘 软件 md5值
hashlib.md5()
import hashlib
ss = 'zhuoda'.encode('utf-8') #字节
'''

hashstr = hashlib.new('md5',ss) #速度慢,不用,用下面这种

hashstr = hashlib.md5(ss)
print(hashstr) #哈希对象
print(hashstr.hexdigest()) #用hexdigest()方法 字符串格式输出 默认32位
print(hashstr.digest()) #用二进制形式输出
'''

加盐

username = "jsonblack"
password = ''123456'
salt = username + 'hello world!'
new_password = (password + salt).encode() #转为 字节类型 b'xxx'
hashlib.md5(new_password) #得到md5加密后的 32位字符串 存入数据库做为密码,当然#也可以截取其中的20位做为验证值 数据存到数据库.或者再随机加2位.加到中间,从第二开#始加.==

一般用来对密码 进行加密的

hashlib.pbkdf2_hmac('md5',password, salt ,10000)
hashlib.pbkdf2_hmac()方法 用md5 方式 ,password 为原始, salt 盐, 10000加密次数

作业

data = {
"name": "juhao",
"age": 18,
"feature" : ["高", "富", "帅"]
}
在程序中将这个字典转化为json并存入文件内,然后再从这个文件中读取出‘帅’这个字符打印出来
设计一个验证用户登录的函数,根据用户输入的口令是否正确,返回True或False

-- coding: utf-8 --

db = {
'xiaolan': 'e10adc3949ba59abbe56e057f20f883e',
'xiaodong': '21218cca77804d2ba1922c33e0151105',
'xiaople': '52c69e3a57331081823331c4e69d3f2e'
}
def login(user, password):
pass

上一篇下一篇

猜你喜欢

热点阅读