zoukankan      html  css  js  c++  java
  • Crypto

    #!/usr/bin/env python
    # coding=utf-8
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex
    import base64
    import json
    import requests
    import hashlib
    import time
    import sys
    
    #  调用的时候先使用  init的方法,然后再调用对应的接口
    class cweisrequest():
    
    	def __init__(self):
    		self.mode = AES.MODE_CBC
    
    #加密函数,如果text不是16的倍数【加密文本text必须是16的倍数】那就补足为16的倍数
    	def cwiesencrypt(self, text):
    		cryptor = AES.new(self.key, self.mode, self.key)
    		# print cryptor
    #这里秘钥key长度必须为16(AES-128)、24(AES-192)、或32(AES-256)
    		length = 16
    		count = len(text)
    		add = length - (count % length)
    		text = text + ('' * add)
    		self.ciphertext = cryptor.encrypt(text)
    		return base64.b64encode(self.ciphertext)
    
    #解密后去掉补足的空格strip()去掉
    	def cweisdecrypt(self,text):
    		cryptor = AES.new(self.key, self.mode, self.key)
    		# plain_text = cryptor.decrypt(a2b_hex(text))
    		plain_text = cryptor.decrypt(text)
    		return plain_text.rstrip('')
    
    
    	def init(self, appid, appsecret, baseurl):
    		self.key = appsecret[8:24].upper()
    		self.appid = appid
    		self.baseurl = baseurl
    
    
    	def img2Base64(self,imgpath):
    		with open(imgpath,"rb") as f:
    			# b64encode是编码,b64decode是解码
    			return base64.b64encode(f.read())
    
    	def cweispost(self,paramDict, url):
    		#将字典数据转成json
    		sJsonParam = json.dumps(paramDict)
    		#对json数据使用aes加密
    		sParamValue = self.cwiesencrypt(sJsonParam)
    		# print sParamValue
    		#对ase加密之后的数据使用md5加密
    		lolValue = hashlib.md5(sParamValue).hexdigest().upper()
    		# print lolValue
    		# 得到时间戳
    		timestamp = int(time.time() * 1000)
    		# print timestamp
    		# 序列化
    		sequence = [str(timestamp), self.appid, lolValue]
    		#逆序
    		sequence.sort(reverse=True)
    		# 拼接
    		signValue = "".join(sequence)
    		# 对得到的拼接字符串用sha1加密
    		signature = hashlib.sha1(signValue).hexdigest().upper()
    		# print signature
    		newParamDict = {
    			"appid": self.appid,
    			"lol": lolValue,
    			"timestamp": timestamp,
    			"sParam": sParamValue,
    			"signature": signature
    		}
    		urlValue = self.baseurl + url
    		# print urlValue,newParamDict
    		#模拟http请求
    		response = requests.post(urlValue, data=newParamDict, verify=False)
    		#得到请求的结果
    		pageValue = response.content
    		#对返回的结果用aes解密
    		# print pageValue
    		return self.cweisdecrypt(base64.b64decode(pageValue))
    
    
    # #1、获取联网核查图片(老接口)
    	def getImgByCIdAndName(self, cId, cName, busFlowId=0):
    		paramDict = {
    				"cId": cId,
    				"cName": cName,
    				"busFlowId": busFlowId
    		}
    		return self.cweispost(paramDict, "getImgByCIdAndName")
    

      

  • 相关阅读:
    Java 中的POJO和JavaBean 的区别
    设计模式的六大原则
    AOP
    Jetbrains 全家桶
    centos7 如何关闭防护墙
    Java 面试题常见范围
    putty readme
    单机环境
    flask-caching缓存
    1.restful 规范与APIView
  • 原文地址:https://www.cnblogs.com/Wly-blogs/p/9765236.html
Copyright © 2011-2022 走看看