zoukankan      html  css  js  c++  java
  • 客户合法性校验(密文hamc方法)

    1.import os
        os.urandom(num) 随机出一个num位的随机bytes
        
    2.import hamc
        md5_obj = hmac.new(盐,随机字符串)
        r = md5_obj.digest()
        拿到一个bytes的结果,也就是密文
        
    补充:hashlib的加密
            # md5_obj = hashlib.md5(sor)
            # md5_obj.update(r_str.encode('utf-8'))
            # result = md5_obj.hexdigest()
            
            
            
    #server层
    import socket
    import hashlib
    import os
    import hmac
    sk = socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    
    conn,addr = sk.accept()
    #
    sor = b'alex'
    #随机字符串
    r_str = os.urandom(16)# 随机出一个16位长度的bytes
    #将随机字符串先发送到客户端client
    conn.send(r_str)
    #用hmac将盐和字符串加密成密文,结果是一个md5对象
    md5_obj = hmac.new(sor,r_str)
    #result此时是bytes类型,不需要进行编码解码等操作
    result = md5_obj.digest()
    #接受来自客户端的密文进行合法性判断
    msg = conn.recv(1024)
    if msg == result:
        #如果服务器端的密文和客户端发送过来的密文相匹配,则表示合法
        conn.send(b'success')
    else:
        conn.send(b'failed')
    
    
    conn.close()
    sk.close()
    
    
    
    #client层
    import socket
    import hmac
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    sor = b'alex'
    #先接收来自服务器的随机字符串
    r_str = sk.recv(1024)
    #用hmac将盐和字符串加密成密文,结果是一个md5对象
    md5_obj = hmac.new(sor,r_str)
    #result此时是bytes类型,不需要进行编码解码等操作
    result = md5_obj.digest()
    #将密文发送给服务器端server进行客户端合法性校验
    sk.send(result)
    #接收服务器对客户端合法性的反应消息
    msg = sk.recv(1024)
    print(msg)
    sk.close()



    图片理解:

  • 相关阅读:
    DQL、DML、DDL、DCL的概念与区别
    TeamViewer
    构建属于自己的ORM框架之二--IQueryable的奥秘
    某考试 T2 sum
    某考试 T1 line
    bzoj 2153: 设计铁路
    [SCOI2010]序列操作
    [SCOI2010]字符串
    [SCOI2010]传送带
    bzoj 2694: Lcm
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/11719058.html
Copyright © 2011-2022 走看看