美文网首页
2018-11-13常用模块 Json base64 hashl

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

作者: 太阳出来我爬山坡 | 来源:发表于2018-11-16 10:30 被阅读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

    • 如果字节数不是3的倍数
      b'ab' 在字节的末尾用\x00 再到编码末尾加1到2个==

    ***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

    相关文章

      网友评论

          本文标题:2018-11-13常用模块 Json base64 hashl

          本文链接:https://www.haomeiwen.com/subject/jqsrfqtx.html