hashlib模块

主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式

import  hashlib

m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象

m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密;用b给一个变量转换的方式,待查

m.update(bytes('hello',encoding='utf-8'))  #与上面结果一样,只是换成bytes函数,要加上encoding='utf-8'

print(m.digest()) #2进制格式的加密后的字符串

print(len(m.hexdigest())) #16进制格式的加密后的字符串

PS:不同的加密方式,用法都同上,把md5换一下就行,下面以sha1为例:

# ######## sha1 加密方式########

hash = hashlib.sha1()

hash.update('admin')

print(hash.hexdigest())

加盐:

SAIT='*hn*36t34fhj86'     #盐值,可以随便取,但一个模块里所有的盐值应取一样的,用于和其他密码连起来,然后md5加密,提高安全性

flask模块 :

是一个web框架,可以开发接口

eg1:下面写一个登录的接口,登录需要url username passwd

import flask

from flask import request,jsonify   #引入请求,用来请求数据;引入json

server=flask.Flask(__name__)      #创建一个服务,把当前这个python文件当做一个服务

user=’admin’

p=’houning123’

server.config[“JSON_AS_ASCII”]=False  #这句话是使返回值的汉字在浏览器里显示正常

@server.route('/login',methods=['get'])    #flask自带的装饰器,这一步是把普通函数变成一个服务,括号里是路径和获取方法

def login():

username=request.values.get(‘username’)   #指获取到传的key:“username”的值,把值赋给左边的username

passwd=request.values.get(‘passwd’)

if username and passwd:   #判断用户名密码是否为空

if username==user and passwd==p:

res={“code”:1000,”msg”:”登录成功”}

else:

res={“code”:2000,”msg”:”账户或密码错误”}

return jsonify(res)

else:

return jsonify({“code”:1999,”msg”:”必填参数未填”})        #把字典转化成json串格式

server.run(debug=True)       #启动服务,debug=True是指调试模式,如果改代码,服务就会自动重启

server.run(port=8888,debug=True,host='0.0.0.0')            #指定端口号,不指定的话默认是5000;debug是自己调试用的,给别人写接口不要加debug;
                                   不指定host,默认是127.0.0.1,是本机的ip,只能自己访问,指定0.0.0.0的话,别人都能访问,代表监听多块网卡上面所有的ip
                                   启动服务在start.py模块里就行,api.py里不要启动服务了,避免重复

eg2:写一个获取用户id的接口

@server.route('/get_user_id',methods=['post','get'])
def get_user_id():
  if request.method=='POST':
    username = request.values.get('username')
    token = request.values.get('token')
    if username and token:
      sql = 'select id from user where username = "%s";'%username
      sql_res = OpertionMysql(sql)
      if sql_res:
        res = OpRedis('user:'+username)
        if res:
          if token==res:
            return jsonify(sql_res)
          else:
            return jsonify(msg.TOKEN_ERR)
        else:
          return jsonify(msg.NO_LOGIN)
      else:
        return jsonify(msg.USER_NOT_FOUND)
    else:
      return jsonify(msg.NOT_NULL)

  else:
    return jsonify(msg.METHOD_ERR)

eg3:写一个注册的接口

@server.route('/reg',methods=['post','get'])
def reg():
  username = request.values.get('username')
  passwd = request.values.get('password')
  c_passwd = request.values.get('c_passwd')
  if username and passwd and c_passwd:
    sql = 'select id from user where username = "%s";'%username
    sql_res = OpertionMysql(sql)
    if sql_res:
      return jsonify(msg.USER_ERR2)
    else:
      if passwd==c_passwd:
        new_password = md5Password(passwd)
        insert_sql = 'insert into user (username,password) VALUE ("%s","%s");'%(username,new_password)
        OpertionMysql(insert_sql)
        return jsonify(msg.SUCCESS)
      else:
        return jsonify(msg.PASSWORD_DIFF)
  else:
    return jsonify(msg.NOT_NULL)

eg4:写获取json串类型入参(post请求)的接口,上面几个例子是获取key和value类型的入参(username=request.values.get('username'))

import flask
from flask import request,jsonify
server=flask.Flask(__name__)
@server.route('/json',methods=['post'])
def json_res():
  res=request.json               #这种方式是获取json类型的入参内容;获取到的数据类型是字典类型
                          ;request.values.get('XXX')这种适用于get、post请求获取key和value类型
                           的入参(?XXX=xxx&yyy=yyy 或者jmeter的body里填key value这两种传参格式)
  print(res)               #打印出入参的json串,是字典类型
  return jsonify({"msg":"ok"})

eg5:牛牛博客:30行代码写上传下载文件接口

import flask,os,time

from flask import request,send_from_directory,jsonify
app = flask.Flask(__name__)#创建一个app,代表这个web服务
@app.route('/get_file',methods=['get'])
def get_file():
    #下载文件接口
    filename = request.values.get('fname',None)
    #获取需要下载的文件名
    if filename:#如果获取到的文件名话
        if os.path.isfile(filename):#判断是否是一个文件
            #返回要下载的文件
            return send_from_directory('.',filename,as_attachment=True)
        else:
            return jsonify({"msg":"文件不存在!"})
    else:
        return jsonify({'msg':'文件名不能为空'})
@app.route('/files',methods=['get'])
def file_list():
    #获取文件列表接口
    files = os.listdir('.')#获取当前目录下所有文件
    new_files = [f for f in files if os.path.isfile(f)]
    #三元运算符,把是文件的放到list中
    return jsonify({"files":new_files})
@app.route('/upload',methods=['post'])
def upload():
    #上传文件接口
    f = request.files.get('file_name',None)
    if f:
        t = time.strftime('%Y%m%d%H%M%S')#获取当前时间
        new_file_name = t+f.filename#给文件重命名,防止有重复文件覆盖
        f.save(new_file_name)#保存文件
        return jsonify({"code":"ok"})
    else:
        return jsonify({"msg":"请上传文件!"})
app.run(debug=True,port=8888)#启动这个web服务

eg6:写从redis获取数据、给redis写入数据的两个接口

import redis       #定义一个操作hash类型redis的函数
def get_hash_all(name,key=None,v=None):
  r=redis.Redis(host=REDIS_HOST,password=REDIS_PASSWD,port=REDIS_PORT,db=REDIS_DB)
  if key and v:
    r.hset(name,key,v)
    res=88
  else:
    res=r.hgetall(name)
  return res

@server.route('/get_sites',methods=['get'])    #写一个从redis取数据的接口
def get_sites():
  res=get_hash_all('sites') #取出来的res是字典类型,sites里面的key和value是bytes类型
  all_sites=[] #定义一个列表,放所有取出的数据
  for k,v in res.items(): #字典循环的时候要用items方法
    new_res = {}
    new_res['sites_name']=k.decode() #decode方法是把bytes类型转换成字符串类型
    new_res['url']=v.decode()
    all_sites.append(new_res) #把一个个字典添加到列表里
  return jsonify(all_sites) #字典和列表都可以被json格式化

@server.route('/set_sites',methods=['post'])      #写一个给redis设置值的接口
def set_sites():
  req=request.json #req代表的是传入的json串,是一个字典类型
  if req.get('site') and req.get('url'): #字典取值用get方法,如果取不到值就返回None
    k=req.get('site')
    v=req.get('url')
    get_hash_all('sites',k,v) #把传入的值写入到redis里
    return jsonify(msg.SUCCESS)
  else:
    return jsonify(msg.NOT_NULL) #括号里是自定义模块里的一个字典类型的值

转载于:https://www.cnblogs.com/hesperid/p/7556024.html

Python:hashlib加密,flask模块写接口相关推荐

  1. Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)

    Python hashlib 加密 Python 提供了 hashlib 模块来进行加密操作.在下面的文章中,我们将介绍 hashlib 模块的常用加密算法. 1. hashlib 简介 hashli ...

  2. python连接sqlserver_python 链接sqlserver 写接口实例

    我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确 ...

  3. Python hashlib、hmac模块

    Python中的用于加密的函数位于hashlib,hmac模块中,都是内置模块,直接导入即可使用 hashlib模块实现了md5,sha1,sha224,sha256,sha384,sha512等算法 ...

  4. python hashlib函数_python模块——hashlib

    python模块--hashlib hashlib模块是对许多hash函数的一个公共接口 new(name, string = '')    执行给定的hash函数来返回一个新的hash对象,使用给定 ...

  5. python教程:flask模块的使用教程

    1.简介 在服务器上运行Flask接口,就能使用requests模块获取该接口的值. 先运行接口文件,再运行requests文件,即可获取值. 2.示例 2.1一个简单的flask接口 import ...

  6. C++和Python混合编程:C++ 通过 POST 请求访问 python 搭建的flask服务

    文章目录 python 搭建服务端: C++ 客户端访问 python 搭建的服务端: 附加:POCO 基础操作(GET) 最近在研究使用C++代码访问用python语言的flask模块搭建的服务,记 ...

  7. 初学者python笔记(hashlib加密、logging日志模块、configparser配置文件)

    文章目录 logging模块 configparser模块 hashlib模块 我们在很多情况下,程序的运行都需要做日志或者某些记录,这就需要用到logging模块来自动记录:同样的,配置文件也是程序 ...

  8. python学习,pip 模块-数据库(mysql)-excel操作-写日志-邮件-md5加密

    #模块 # 标准模块 # python自带的 # 第三方模块 # pymysql # 自己写的python文件 # 导入模块的实质 # import my_model # 把导入的模块运行了一遍 # ...

  9. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码

    文章目录: 1 hashlib介绍 2 hashlib模块使用 2.1 查看hashlib中有哪些hash算法 2.2 对字符串进行加密 2.3 对于数据比较大,加密可以分块,结果一样 2.4 has ...

  10. Python hashlib模块中的sha加密

    Python hashlib模块中的sha加密 一.sha简介 sha (Secure Hash Algorithm)模块与md5的作用相似,用于对信息进行加密. "Secure Hash ...

最新文章

  1. js / jquery 零散收集
  2. Windows Sockets2 详解2——堵塞与非堵塞模式
  3. @import注解_Spring 注解之@Import 注入的各种花活
  4. Java笔记(基础第二篇)
  5. 31/100. Palindromic Substrings
  6. c语言重新进入for循环,大佬们帮帮忙 帮我改改 怎样能在输入Y后 再次进行for循环...
  7. Java @Transient 注解使用
  8. java base64 显示不完整_如何解决CAD图纸显示不完整、图纸无效?一分钟教你,不允许错过...
  9. sql不能使用OpenRowset
  10. 两场面试,一次心灵洗礼
  11. 【opencv学习笔记】021之霍夫直线变换原理详解
  12. 测判三极管的口诀 (挑战者)
  13. 技术项目中的人、风险与应对方法
  14. 腾讯云GPU服务器深度学习环境搭建
  15. 基于罗格里德矩阵的坐标转换7参数求取
  16. windows+中标麒麟双系统启动优先顺序调整方法
  17. 全面理解document.write()
  18. 有哪些信息学奥赛相关的比赛和考试
  19. 使用Phaser和HTML5特性检测移动设备旋转重力方向
  20. 使用Spring Boot Thin Launcher 打包Spring Boot项目,jar包瘦身

热门文章

  1. /etc/profile
  2. 《敏捷制造——敏捷集成基础结构设计》——2.3 集成基础结构数据访问模型
  3. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题
  4. 第二章 jQuery选择器
  5. 缓存与缓冲的区别 Difference Between Cache and Buffer
  6. windows server 2012 动态访问控制
  7. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之22---BDS的分发流程...
  8. STM32从设置IO输入上下拉到寄存器GPIOx_BSRR、GPIOx_BRR
  9. vue 组件传值$attrs $listeners $bus provide/inject $parent/$children
  10. ACM模板——线段树树状数组ST表