当前位置: 首页 > news >正文

诚信网站备案回合制网页游戏大全

诚信网站备案,回合制网页游戏大全,网站建设哪个公司比较好,做个外贸的网站不懂英语咋做hmac — 加密消息签名和验证 1.概述 它的全称叫做Hash-based Message Authentication Code: 哈希消息认证码#xff0c;从名字中就可以看出来这个hmac基于哈希函数的#xff0c;并且还得提供一个秘钥key#xff0c;它的作用就是用来保证消息的完整性#xff0c;不可篡改。…hmac — 加密消息签名和验证 1.概述 它的全称叫做Hash-based Message Authentication Code: 哈希消息认证码从名字中就可以看出来这个hmac基于哈希函数的并且还得提供一个秘钥key它的作用就是用来保证消息的完整性不可篡改。基本思想就是将消息用一个哈希函数加上一个秘钥key生成一个摘要比如现在很流行的JWT就是基于hmac实现的。 2.签名消息 2.1.默认MD5算法加密 new() 函数创建一个用于计算消息签名的新对象。此示例使用默认的 MD5 散列算法。 import hmacdigest_maker hmac.new(bsecret-shared-key-goes-here)with open(lorem.txt, rb) as f:while True:block f.read(1024)if not block:breakdigest_maker.update(block)digest digest_maker.hexdigest() print(digest)运行时代码读取数据文件并为其计算 HMAC 签名 4bcb287e284f8c21e87e14ba2dc40b162.2.可选算法加密 尽管默认的 hmac 算法是 MD5但那不是最安全的方法。MD5 摘要算法有一些缺点例如碰撞两个不同的消息产生了不同的哈希值。 SHA-1 被公认为是比较健壮的应该使用它。 import hmac import hashlibdigest_maker hmac.new(bsecret-shared-key-goes-here,b,hashlib.sha1, )with open(hmac_sha.py, rb) as f:while True:block f.read(1024)if not block:breakdigest_maker.update(block)digest digest_maker.hexdigest() print(digest)new() 函数接受三个参数值第一个是密钥共享于两个通信的端点之间所以两个端点都使用相同的值。第二个参数是初始化消息值。如果需要认证的消息内容非常小例如时间戳或者 HTTP POST那么整个消息体可以传入 new() 而不用 update() 方法。最后一个参数是要使用的摘要算法。默认的是 hashlib.md5例子中使用的是 hashlib.sha1。 dcee20eeee9ef8a453453f510d9b6765921cf0992.3.二进制摘要 前一个例子使用了 hexdigest() 方法生成可打印的摘要字符串。这个摘要字符串是由 digest() 方法生成的值的不同表现形式而已这个值可能包括包括不可打印字符包括 NUL。一些 web 服务Google checkout, Amazon S3使用了二进制摘要的 base64 版本而不是 hexdigest。 import base64 import hmac import hashlibwith open(lorem.txt, rb) as f:body f.read()hash hmac.new(bsecret-shared-key-goes-here,body,hashlib.sha1, )digest hash.digest() print(base64.encodestring(digest))base64 编码的字符串以换行符结尾当将字符串嵌入到 HTTP 头或者其他敏感的上下文中时经常需要将这个换行符删除 bolW2DoXHGJEKGU0aE9fOwSVE/o4\n3.消息签名的应用 HMAC 算法应该用于任何公共网络服务并且任何数据都应该存储在安全性很重要的地方。例如当数据被通过管道或者 socket 发送的时候数据应该被签名然后在使用之前验签。此处给出的扩展示例位于文件 hmac_pickle.py。 第一步是创建一个函数计算一个字符串的摘要以及一个简单的类用于实例化并通过通信通道传递。 import hashlib import hmac import io import pickle import pprintdef make_digest(message):Return a digest for the message.hash hmac.new(bsecret-shared-key-goes-here,message,hashlib.sha1,)return hash.hexdigest().encode(utf-8)class SimpleObject:Demonstrate checking digests before unpickling.def __init__(self, name):self.name namedef __str__(self):return self.name接下来创建一个 BytesIO 缓冲池代表一个 socket 或者管道。例子中使用了一个原生的但是很容易解析的格式化的数据流。首先数据的摘要和长度被写入后面紧跟了一个换行符。对象的序列化形式由 pickle 生成。真实的系统可能不希望依赖于长度值因为如果摘要错误则长度也是错误的。某些不太可能出现在实际数据中的终结符序列可能更加合适。 然后示例程序中往数据流中写入了两个对象。第一个是使用正确的摘要值写入的。 # 使用缓冲区模拟可写套接字或者管道 out_s io.BytesIO()# 往流中写入一个有效的对象 # digest\nlength\npickle o SimpleObject(digest matches) pickled_data pickle.dumps(o) digest make_digest(pickled_data) header b%s %d\n % (digest, len(pickled_data)) print(WRITING: {}.format(header)) out_s.write(header) out_s.write(pickled_data)第二个写入流中的对象使用了一个无效的摘要值摘要值是由其他一些数据生成的而不是序列化之后的值。 # 往流中写入一个无效的对象 o SimpleObject(digest does not match) pickled_data pickle.dumps(o) digest make_digest(bnot the pickled data at all) header b%s %d\n % (digest, len(pickled_data)) print(\nWRITING: {}.format(header)) out_s.write(header) out_s.write(pickled_data)out_s.flush()记住数据是在 BytesIO 缓冲池中的它可以再次被读出。首先读取带有摘要和数据长度的行。然后使用长度值读取剩下的数据。pickle.load() 可以直接从流中读取数据但是它假设一个可信任的数据流而且这个数据还不足够可信能够反序列化它。从流中读取序列化值为字符串而不实际反序列化更安全 # 使用 BytesIO 模拟可读的 socket 或者管道 in_s io.BytesIO(out_s.getvalue())# 读取数据 while True:first_line in_s.readline()if not first_line:breakincoming_digest, incoming_length first_line.split(b )incoming_length int(incoming_length.decode(utf-8))print(\nREAD:, incoming_digest, incoming_length)一旦序列化数据被读取到内存摘要值可以被重新计算并且使用 compare_digest() 同传递过来的数据比较。如果摘要匹配证明它是安全的去信任数据并且反序列化它。 incoming_pickled_data in_s.read(incoming_length)actual_digest make_digest(incoming_pickled_data)print(ACTUAL:, actual_digest)if hmac.compare_digest(actual_digest, incoming_digest):obj pickle.loads(incoming_pickled_data)print(OK:, obj)else:print(WARNING: Data corruption)输出表示第一个对象被验证通过第二个被视为「损坏」 python3 hmac_pickle.pyWRITING: bf49cd2bf7922911129e8df37f76f95485a0b52ca 69\nWRITING: bb01b209e28d7e053408ebe23b90fe5c33bc6a0ec 76\nREAD: bf49cd2bf7922911129e8df37f76f95485a0b52ca 69 ACTUAL: bf49cd2bf7922911129e8df37f76f95485a0b52ca OK: digest matchesREAD: bb01b209e28d7e053408ebe23b90fe5c33bc6a0ec 76 ACTUAL: b2ab061f9a9f749b8dd6f175bf57292e02e95c119 WARNING: Data corruption可以在定时攻击中使用简单的字符串或字节比较来比较两个摘要以通过传递不同长度的摘要来暴露部分或全部秘密密钥。compare_digest() 实现了一个快速但是常量时间的比较函数去防止定时攻击。
http://www.w-s-a.com/news/880068/

相关文章:

  • 外贸类网站酷玛网站建设
  • 合肥网站设计建设南宁网站seo推广优化公司
  • 临沂百度网站7x7x7x7x8黄全场免费
  • 海洋牧场网站建设大良网站设计价格
  • 手机端网站关键字排名北京seo公司哪家好
  • 福建建设培训中心网站网站建站服务公司地址
  • 青岛网站优化快速排名企业网址怎么整
  • 做公司网站用什么系统seo搜索排名优化方法
  • dw怎么做网站标题图标做网站重庆
  • 机场建设相关网站公司官网设计制作
  • 大学网站建设的目标技术支持 优府网络太原网站建设
  • wordpress设置密码访问带提示广州做网站优化哪家专业
  • 如何帮人做网站赚钱西安室内设计公司排名
  • 房产网站建设产品网站域名和邮箱域名
  • 网站建设核心优势seo求职信息
  • 网站手册自己在百度上可以做网站吗
  • 影楼网站源码建行业网站的必要性
  • 深圳app网站设计软件开发公司税收优惠政策
  • 北京市中关村有哪家可以做网站维护客户管理系统 wordpress
  • 做网站拉客户有效吗全景图网页制作工具
  • 网站建设公司行业建设网站需要提供什么资料
  • 别人的做网站网页打不开图片
  • 北京专业网站设计推荐怎么建立网站网址
  • 上海网站建设开发公司哪家好网站数据搬家
  • 杭州建站平台哪里有免费的网站推广软件
  • 深圳极速网站建设服务什么网站可以做产品入驻
  • 淄博易宝网站建设app推广拉新公司
  • 营销型外贸网站建设软件备案域名出租
  • 网站域名禁止续费m99ww094cn 苍井空做的网站
  • 上海建设工程网站大同网站建设熊掌号