Crypto
Posted wly-blogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")
以上是关于Crypto的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:stream_socket_enable_crypto():SSL操作失败,代码1 [重复]
为什么Crypto ++中的AES代码会产生不同的性能结果?
localhost 和“stream_socket_enable_crypto():SSL 操作失败,代码为 1”[重复]