客户合法性校验(密文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()

图片理解:

原文地址:https://www.cnblogs.com/god-for-speed/p/11719058.html

时间: 2024-08-30 12:19:35

客户合法性校验(密文hamc方法)的相关文章

java身份证合法性校验并获取并根据身份证号提取身份证相关信息

/** * 身份证前6位[ABCDEF]为行政区划数字代码(简称数字码)说明(参考<GB/T 2260-2007 中华人民共和国行政区划代码>): * 该数字码的编制原则和结构分析,它采用三层六位层次码结构,按层次分别表示我国各省(自治区,直辖市,特别行政区). * 市(地区,自治州,盟).县(自治县.县级市.旗.自治旗.市辖区.林区.特区). 数字码码位结构从左至右的含义是: 第一层为AB两位代码表示省.自治区.直辖市.特别行政区: 第二层为CD两位代码表示市.地区.自治州.盟.直辖市所辖市

华为OJ:2192 邮箱地址合法性校验

注意输入的字符串里面可能有空格,所以要nextLine()而不是next(),其他一个个验证就好了,@要计算次数,多了少了都不行. import java.util.Scanner; public class eMailchecked { public static void main(String args[]){ Scanner input=new Scanner(System.in); String s=input.nextLine(); int countAt=0; if(s.charA

身份证号码的合法性校验

javascript版本的身份证号码的合法性校验 版权声明:本文为博主原创文章,未经博主允许不得转载.

(转载)postgresql navicat 客户端连接验证失败解决方法:password authentication failed for user

命令:su - postgres CREATE USER foo WITH PASSWORD 'secret'; ==================== 1.2个配置修改 postgresql.conf:修改 listen_addresses = '*' pg_hba.conf:增加 # IPv4 local connections:host    all             all             127.0.0.1/32            md5host    all  

Struts2请求参数合法性校验机制

在Action中通过代码执行数据校验 请求参数的输入校验途径一般分两种:客户端校验 :通过JavaScript 完成 (jquery validation插件),目的:过滤正常用户的误操作. 服务器校验 :通过java代码完成 ,目的:整个应用阻止非法数据的最后防线 列如: <h1>登录:请求数据校验--代码手动校验</h1> <s:fielderror/> <form action="${pageContext.request.contextPath

android中使用https是否对服务证书合法性校验的新的体会

package com.cetcs.logreport.utils; import android.content.Context; import org.apache.http.conn.ssl.SSLSocketFactory; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.net.U

Spring AOP实现 Bean字段合法性校验

使用SpringAop 验证方法参数是否合法 先定义两个注解类ValidateGroup 和 ValidateFiled ValidateGroup .java package com.zf.ann; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotat

MVC 模型js远程校验的使用方法

我们在网站注册的时候往往需要在用户注册完毕的时候显示用户名是否可用,这就要用到模型的远程校验了.具体如下. [Required(ErrorMessage = "用户名不能为空"), Remote("ValidateUserName", "CommonWebApi", AreaReference.UseRoot, ErrorMessage = "用户名已被占用")] [StringLength(100, ErrorMessage

Ubuntu下使用Cisco VPN客户端连接公司VPN设置方法

本节是在Ubuntu系统下完成Cisco VPN客户端的安装.打开命令行终端,搜索关于Cisco的软件包,并匹配VPN关键字 $ sudo apt-cache search cisco |grep -i vpn kvpnc - vpn clients frontend for KDE4 libopenconnect-dev - open client for CiscoAnyConnect VPN - development files libopenconnect2 - open client