欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
快捷导航
搜索
查看: 11711|回复: 1

usersig 生成算法纯 python 实现

[复制链接]

23

主题

1

好友

1216

积分

版主

Rank: 10Rank: 10Rank: 10Rank: 10

云币
2903
威望
1216
发表于 2016-11-2 23:22:57 |显示全部楼层
  1. #! /usr/bin/python
  2. # coding:utf-8

  3. # 此文件是 tls sig api 的 python 另一种实现
  4. # 使用了 python ecdsa 开发库

  5. __author__ = "tls@tencent.com"
  6. __date__ = "$Oct 2, 2016 11:17:43 PM"

  7. import OpenSSL
  8. import base64
  9. import zlib
  10. import json
  11. import time

  12. # python ecdsa 开发库请到 https://github.com/warner/python-ecdsa
  13. # 或者 tls 技术支持分享的链接 http://share.weiyun.com/24b674bced4f84ecbbe6a7945738b9f4
  14. # 下载,下载完毕之后进入其根目录,运行下面的命令进行安装,
  15. # python **p.py install
  16. # ubuntu 用户可能需要添加 sudo
  17. # 由于 python ecdsa 这个开发库仅支持 ec 格式的私钥,从腾讯云下载的私钥格式是
  18. # pk #8 的格式,需要使用 openssl 命令进行转换,或者使用我们工具包中的 openssl 进行转换
  19. # 下面是转换命令
  20. # openssl ec -outform PEM -inform PEM -in private.pem -out private_ec.pem
  21. # -in 后面的传入下载的私钥 -out 后面是转换后的私钥文件

  22. from ecdsa import SigningKey,util
  23. import hashlib

  24. # 这里请填写应用自己的私钥
  25. ecdsa_pri_key = """
  26. 请填上应用自己的私钥
  27. """

  28. def base64_encode_url(data):
  29.     base64_data = base64.b64encode(data)
  30.     base64_data = base64_data.replace('+', '*')
  31.     base64_data = base64_data.replace('/', '-')
  32.     base64_data = base64_data.replace('=', '_')
  33.     return base64_data

  34. def base64_decode_url(base64_data):
  35.     base64_data = base64_data.replace('*', '+')
  36.     base64_data = base64_data.replace('-', '/')
  37.     base64_data = base64_data.replace('_', '=')
  38.     raw_data = base64.b64decode(base64_data)
  39.     return raw_data

  40. class TLSSigAPI:
  41.     """"""   
  42.     __acctype = 0
  43.     __identifier = ""
  44.     __appid3rd = ""
  45.     __sdkappid = 0
  46.     __version = 20151204
  47.     __expire = 3600*24*30       # 默认一个月,需要调整请自行修改
  48.     __pri_key = ""
  49.     __pub_key = ""
  50.     _err_msg = "ok"
  51.    

  52.     def __get_pri_key(self):
  53.         return self.__pri_key_loaded

  54.     def __init__(self, sdkappid, pri_key):
  55.         self.__sdkappid = sdkappid
  56.         self.__pri_key = pri_key
  57.         self.__pri_key_loaded = SigningKey.from_pem(self.__pri_key)

  58.     def __create_dict(self):
  59.         m = {}
  60.         m["TLS.account_type"] = "%d" % self.__acctype
  61.         m["TLS.identifier"] = "%s" % self.__identifier
  62.         m["TLS.appid_at_3rd"] = "%s" % self.__appid3rd
  63.         m["TLS.sdk_appid"] = "%d" % self.__sdkappid
  64.         m["TLS.expire_after"] = "%d" % self.__expire
  65.         m["TLS.version"] = "%d" % self.__version
  66.         m["TLS.time"] = "%d" % time.time()
  67.         return m

  68.     def __encode_to_fix_str(self, m):
  69.         fix_str = "TLS.appid_at_3rd:"+m["TLS.appid_at_3rd"]+"\n" \
  70.                   +"TLS.account_type:"+m["TLS.account_type"]+"\n" \
  71.                   +"TLS.identifier:"+m["TLS.identifier"]+"\n" \
  72.                   +"TLS.sdk_appid:"+m["TLS.sdk_appid"]+"\n" \
  73.                   +"TLS.time:"+m["TLS.time"]+"\n" \
  74.                   +"TLS.expire_after:"+m["TLS.expire_after"]+"\n"
  75.         return fix_str

  76.     def tls_gen_sig(self, identifier):
  77.         self.__identifier = identifier
  78.         m = self.__create_dict()
  79.         fix_str = self.__encode_to_fix_str(m)
  80.         pk_loaded = self.__get_pri_key()
  81.         sig_field = pk_loaded.sign(fix_str, hashfunc=hashlib.sha256, sigencode=util.sigencode_der)
  82.         sig_field_base64 = base64.b64encode(sig_field)
  83.         m["TLS.sig"] = sig_field_base64
  84.         json_str = json.dumps(m)
  85.         sig_cmpressed = zlib.compress(json_str)
  86.         base64_sig = base64_encode_url(sig_cmpressed)
  87.         return base64_sig

  88. def main():
  89.     api = TLSSigAPI(1400001052, ecdsa_pri_key)
  90.     sig = api.tls_gen_sig("xiaojun")
  91.     print sig

  92. if __name__ == "__main__":
  93.     main()
复制代码

0

主题

0

好友

32

积分

小白[LV1]

Rank: 1

云币
15
威望
15
发表于 2016-12-16 13:47:22 |显示全部楼层
用代码生成的sig再用工具检验一直是失败
F:\tls_sig_api-windows-64\tools>tls_licence_tools.exe verify public_key.pem sig_test 1400021429 zhengyufei
check sig faild:  check_licence failed iRet:-2
cmd verify return -5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2020-7-14 17:05 , Processed in 1.118806 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部