首页 > 其他分享 >MACSHA256加密生成签名

MACSHA256加密生成签名

时间:2024-06-03 20:45:22浏览次数:19  
标签:body 加密 MACSHA256 sign json params 签名 Sign data

再水一篇,也是业务测试中遇到的一种加密方式,这里示例就直接使用相同的加密规则了,可以根据业务场景自行调整加密前字符串

加密规则

  所有API的请求参数(除去Sign参数),参数名转小写后根据参数名称的AscII表顺序排序;   

  将排序号的参数名和参数值拼装在一起得到新的字符串A;   

  注:非Get请求,需要把body的值也拼接过去,把body内容作为一个参数值,参数名为 body,参与排序;

  使用HMACSHA256对上述拼接出来的字符串A进行摘要计算 GetHMACSHA256(A,游戏对应的秘钥);   

  得到Sign签名后即可正常发起请求

示例代码

import hmac
import hashlib
import common.sdkapi_sign
import json
import re


def com_sign(request, Appkey=None, data=None, body=None):
    """
    使用直接调用这个函数即可
    :param request:请求方式(get、post)
    :param Appkey: 签名key
    :param data: 请求参数
    :param body: 请求体
    """
    if request == 'get':
        sign = common.sdkapi_sign.Sign.signs(Appkey, common.sdkapi_sign.Sign.ascii(data))
        # 生成的签名添加到加入请求参数
    elif request == 'post':
        # 将body字典对象转为字符串并且替换为双引号
        body_json = json.dumps(body).replace("'", '"')
        # 去除空格
        body_json = re.sub(r"\s", "", body_json)

        # print(body_json)
        data['body'] = body_json
        # 根据入参生成签名
        sign = common.sdkapi_sign.Sign.signs(Appkey, common.sdkapi_sign.Sign.ascii(data))
    else:
        print("请求方式不正确")
        sign = None
    return sign


class Sign:
    # 标记静态方法
    @staticmethod
    # 将请求参数排序生成字符串
    def ascii(data):
        # 转化为小写参数名
        params = {k.lower(): v for k, v in data.items()}

        # 按照ASCII码顺序排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # print('排序后--%s' % sorted_params)

        # 拼接参数成字符串
        params_str = "&".join(["{}={}".format(k, v) for k, v in sorted_params])
        # print('拼接字符串--%s' % params_str)

        return params_str

    # 标记静态方法
    @staticmethod
    # 根据appkey加密生成sign
    def signs(appkey, strToSign):
        # hmac_sha256加密入参
        s = hmac.new(bytes(appkey, encoding='utf-8'), bytes(strToSign, encoding='utf-8'),
                     digestmod=hashlib.sha256).hexdigest().lower()
        # print('签名--%s' % s)
        return s

 

标签:body,加密,MACSHA256,sign,json,params,签名,Sign,data
From: https://www.cnblogs.com/cai11/p/18229601

相关文章

  • MD5加密
    场景服务端与客户端进行http通讯时,为了防止被爬虫,数据安全性等,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回。常见的方式就是引入sign签名参数,通过特定的方式拼接字符串后再实行加密,业务中经常使用的就是AES、RSA、MD5等。。python——MD5加密importhashlib......
  • 如何实现sm3加密
    SM3加密应用何为sm3加密?SM3是由中国国家密码管理局设计的一种密码杂凑函数,类似于SHA-256和MD5等国际标准的散列算法。SM3算法是中国国家标准《GB/T32905-2016信息安全技术SM3密码杂凑算法》的一部分,用于数字签名和数据完整性验证等领域。SM3算法的特点输出长度:SM3算法的输......
  • 四种加密模式
    四种加密模式一.ECB(ElectronicCodeBook)/电码本模式​​ECB模式简单,针对各个明文分组使用同一套密钥独立进行加密,得到密文,可以实现并行加密,但是可能出现密文重复,安全性差。二.CBC(CipherBlockChaining)/密文分组链接模式​​CBC模式加密模式是明文在会与一个向量进行......
  • 【安全性测试】突破sign签名校验实现请求重放
     对于安全性较高的网站,通常会用到sign签名来实现多重验证,常见的有:sign对加密密钥验证(后面会介绍)通过sign对请求重放验证(该文章重点介绍sign请求重放验证)在渗透测试中,重放数据包是非常重要的测试条件,大多数功能都需要通过重放来测试,像爆破、sql注入、篡改参数实现越权等等;而开发......
  • MD5加密算法中的加盐值(SALT)简单理解
    MD5是一种广泛使用的加密散列函数,它可以产生一个128位(16字节)的哈希值,通常用一个32位的十六进制字符串表示。MD5的主要目的是确保数据的完整性,而不是用于安全加密。加盐(Salting)是一种安全措施,用于增强密码存储的安全性。在密码学中,加盐值是一个随机生成的数据片段,它与密码结......
  • 高版本glibc堆fd指针加密绕过
    高版本glibc堆fd指针加密绕过参考资料:[原创]glibc高版本堆题攻击之safeunlink-Pwn-看雪-安全社区|安全招聘|kanxue.com堆指针加密是在2.32版本引进的,作用在tcache和fastbin。主要是对fd指针进行异或操作来使得不好利用UAF等需要fd指针的手法。从一个例子了解这个保护机制bin......
  • FSDump工具的内部原理和高级应用技术,基本用法和应用场景,掌握文件加密属性的查看和加密
    EFSDump初级应用的大纲:1.了解EFSDump简介:介绍EFSDump工具的作用、原理和功能。安装与配置:指导学习者如何获取和配置EFSDump工具,准备使用环境。2.基本用法查看文件加密属性:演示如何使用EFSDump查看文件的加密属性,识别加密文件。导出加密密钥:指导学习者如何导出文件的加......
  • 恢复被kat6.l6st6r勒索病毒加密的数据,如何防御这种病毒?
    引言:        kat6.l6st6r勒索病毒是一种新型的计算机威胁,它利用高强度的加密算法技术锁定用户数据文件。该病毒通过多种途径如安全漏洞、钓鱼邮件、恶意网站等进行传播,感染计算机后会对文件进行加密并添加“.kat6.l6st6r”后缀,导致用户无法访问。此外,病毒还会在受害......
  • Ansible05-Ansible进阶(流程控制、Roles角色、加密优化调优等)
    目录写在前面7Ansible进阶7.1流程控制7.1.1handlers触发器与notify7.1.1.1未使用handlers7.1.1.2使用handlers7.1.2when判断7.1.2.1when的语法7.1.2.2when判断主机名选择模块输出7.1.2.3when结合register变量7.1.3loop/with_items循环7.1.3.1with_items案......
  • 在区块链和加密货币领域,DEX 代表去中心化交易所(Decentralized Exchange)
    在区块链和加密货币领域,DEX代表去中心化交易所(DecentralizedExchange)。与传统的中心化交易所(CEX)不同,DEX不依赖于中介机构或第三方来管理用户的资产和交易。相反,交易直接在区块链上进行,使用智能合约来自动执行和记录交易。下面是一些关于DEX的关键概念:核心特点无托管(Non-C......