51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1771|回复: 4
打印 上一主题 下一主题

关于接口测试签名和验签不通过的疑问.希望高手指点,谢谢!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-11-2 09:17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是这样的  我这个代码是测试[登录接口],需要把密码通过aes加密,然后进行签名.在最后调用登录接口,具体见以下截图.但是一直提示签名失败.麻烦大神帮我看看,万分感谢.
接口文档相关信息我截图如下:(我就是按照这个步骤来弄的)




代码如下:

import unittest
import hashlib
import requests
import os, sys
from Crypto.Cipher import AES
from Crypto import Random
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)
# from db_fixture import test_data

app_master_secret="F0CED9E71C0D2798CFCEF0D3086F60";

#测试b2c登录接口
class b2cTest(unittest.TestCase):
    def setUp(self):
        self.base_url = "http://test.xxxxx.com/api/login/"

    def tearDown(self):
        print (self.result)

    def test_example(self):
        #加密
        key = b"7BD87CCADE73F50B4918DCAD082938"  # 16-bytes password
        iv = Random.new().read(AES.block_size)
        self.key = hashlib.sha256(key).digest()
        obj = AES.new(self.key,AES.MODE_CBC,iv)
        password_chushi = "a12345678"
        password_chushi.encode("utf-8")
        data = self.pkcs7padding(password_chushi)
        password_value=obj.encrypt(data)

        myParameters={'username': '15600002746', 'password': str(password_value)}

        print(myParameters['username'])
        print(myParameters['password'])

        #签名
        md5 = hashlib.md5()
        sign_str = "post" + str(self.base_url) + str(myParameters['username']) + str(myParameters['password']) + app_master_secret # 拼接字符串
        sign_str1 = sign_str.upper();  # 转换为大写
        sign_bytes_utf8 = sign_str1.encode(encoding="utf-8")
        md5.update(sign_bytes_utf8)
        self.sign_md5 = md5.hexdigest()

        #组装my_parameters
        payload={"client-type": 2,
                 "device":"111",
                 "device-identifier":"222",
                 "app-version":"333",
                 "channel":"444",
                 "os-version": "555",
                 "timestamp":"666",
                 "my-parameters":str(myParameters),
                 "sign":self.sign_md5
                 }

        #发送请求
        r = requests.post(self.base_url,data=payload)
        print (data)
        self.result = r.json()
        print(self.result['retCode'])
        print (r.status_code)
        print (self.result)
        self.assertEqual(self.result['retCode'], 200)

    def pkcs7padding(self, data):
        bs = AES.block_size
        padding = bs - len(data) % bs
        padding_text = chr(padding) * padding
        return data + padding_text

if __name__ == '__main__':
    unittest.main()


服务器返回:{'retMsg': '签名验证失败', 'retCode': '40000'}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2016-11-2 09:18:03 | 只看该作者
麻烦大家指点一下,谢谢啦!!!
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2024-7-8 09:00
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    3#
    发表于 2016-11-2 11:15:42 | 只看该作者
    没明白   有点多  你可以找对应的大神群问一下,但是还是建议言简意赅

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2016-11-2 14:32:09 | 只看该作者
    就是根据我的接口需求.我这个代码写得是否正确.接口文档就是截图描叙
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    3 小时前
  • 签到天数: 2804 天

    连续签到: 3 天

    [LV.Master]测试大本营

    5#
    发表于 2016-11-4 14:08:26 | 只看该作者
    最简单的办法是看服务器日志调一下
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-6 11:03 , Processed in 0.067849 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表