web接口之数字签名

web接口之数字签名

什么是数字签名

所谓数字签名(Digital Signature)(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,

但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用

于签名,另一个用于验证。

数字签名的实现

数字签名的简单实例是直接利用RSA算法和发送方的秘密密钥。对被签名的数据进行加密。当接收方收取本块

密文时,使用发送方的公开密钥进行解密,如果能够还原明文,则根据公开密钥体制的特点(公开密钥加密的密文

只能用秘密密钥解密,秘密密钥加密的密文只能用公开密钥解密),可以认为该数据确实来自于希望的发送方。

接口测试中的数字签名

在使用HTTP/SOAP协议传输时,签名作为其中一个参数,起到鉴权的作用(客户端的密匙和服务端的密匙匹配)

以及数据防篡改(参数是明文传输,将接口参数及密匙生成加密字符串,将加密字符串作为签名),因为对整个接

口的参数进行了加密,因此任何一个参数发生变化那么签名验证及失败。

弊端:MD5加密不可逆,服务器端必须知道客户端的接口参数和值,否则签名验证便会失败,一般接口在设计时

客户端请求参数并不完全已知,那么就不能用全参加密。

在接口开发过程中,一般通过时间戳+sign作为密匙加密传输。

这种情况测试接口时,通过获取时间戳和拿到sign密匙后,再拼接成一个字符串,再加密这个字符串,然后和参

数一起传输。

MD5时间戳和sign的例子:

import hashlib  # MD5加密
import time

sign_key = 'asd123'  # key 作为密钥

now_time = time.time()  # 获取当前时间 这里获取的是从1970年1月1日0时0分0秒到现在度过的秒
c_time = str(now_time).split('.')[0]  # 获取.之前的时间戳
sign = c_time + sign_key  # 拼接成一个字符串

md5 = hashlib.md5()

sign_bytes_uft8 = sign.encode(encoding='utf-8')   #进行UTF-8编码
md5.update(sign_bytes_uft8)
sign_md5 = md5.hexdigest()      #md5加密

print(sign_md5)

当前时间戳+key加密后,就可以作为参数直接传输了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

patmos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值