python base64 crypto产品加密案例

-- coding: utf-8 --

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import json
import urllib2
import time
import random, string
import base64
import argparse
import sys
import os
import datetime
class prpcrypt():

def __init__(self, key, iv):
    self.key = key
    self.iv = iv
    self.mode = AES.MODE_CBC
    self.BS = AES.block_size
    # 补位
    self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
    self.unpad = lambda s: s[0:-ord(s[-1])]

def encrypt(self, text):
    a = (self.BS - len(text) % self.BS)
    b = chr(self.BS - len(text) % self.BS)
    text = self.pad(text)
    cryptor = AES.new(self.key, self.mode, self.iv)
    # 目前AES-128 足够目前使用
    ciphertext = cryptor.encrypt(text)
    # 把加密后的字符串使用base64编码
    return base64.b64encode(ciphertext)

# 解密后,去掉补足的空格用strip() 去掉
def decrypt(self, text):
    text = base64.b64decode(text)
    cryptor = AES.new(self.key, self.mode, self.iv)
    plain_text = cryptor.decrypt(text)
    return self.unpad(plain_text.rstrip(‘\0‘))

class mock():
def init(self, acct_id):
key_len = 30
listStr = [‘http://‘,‘credit.wanda.cn‘,‘/credit-gw/service‘]
self.url = ‘‘.join(listStr)
self.headers = {‘Content-type‘: ‘application/json‘, ‘X_WANDA_ACCT_ID‘: acct_id,
‘Cache-Control‘: ‘no-cache‘}
self.keylist = [random.choice(string.letters + string.digits) for i in range(key_len)]
self.reqsn = "".join(self.keylist)
self.reqtime = str(int(time.time())) + ‘000‘

def format(self, acct_id, acct_data):
    data = {"req_time": self.reqtime, "acct_id": acct_id, "inf_id": "P_C_B016", "prod_id": "P_C_B016",
            "request_sn": self.reqsn,  "req_data": acct_data}
    return data

def send(self, data):
    req = urllib2.Request(self.url, data, self.headers)
    try:
        f = urllib2.urlopen(req)
    except urllib2.HTTPError, e:
        #print e.code
        #print e.read()
        return None
    else:
        return f.read()

start_time = datetime.datetime.now()
iv = "0000000000000000"
key = ‘5d8f090cb619624819a78e145266334a‘
acct_id = ‘CREDIT_TEST_ACCTID‘
acct_data =
key = a2b_hex(key)
req_data = mock(acct_id).format(acct_id, acct_data)
req_data = json.dumps(req_data)
#print "请求原文:", req_data
req_data = prpcrypt(key, iv).encrypt(req_data)
#print "请求密文:", req_data
respon_data = mock(acct_id).send(req_data)
#print "响应密文:", respon_data
#if respon_data != None:
respon_data = prpcrypt(key, iv).decrypt(respon_data)

retcode = respon_data["retcode"]

print retcode

respon_data = json.loads(respon_data)
retcode = respon_data["retcode"]
end_time = datetime.datetime.now()
#print end_time
result_end = str(end_time - start_time)
#print result_end
response_sn = respon_data[‘response_sn‘]
if name == ‘main‘:
iv = "0000000000000000"
key = ‘5d8f090cb619624819a78e145266334a‘
acct_id = ‘CREDIT_TEST_ACCTID‘
acct_data = {"name": "周元", "cardNo": "512222197808120017", "idType": "101", "reasonCode": "01","mobile": "13924652748", "qq": "[email protected]", "wechat": "dgfh0890","weibo": "[email protected]"}
key = a2b_hex(key)
req_data = mock(acct_id).format(acct_id, acct_data)
req_sn = req_data[‘request_sn‘]
acct_id = req_data[‘acct_id‘]
req_data = json.dumps(req_data)
#print "请求原文:", req_data
req_data = prpcrypt(key, iv).encrypt(req_data)
#print "请求密文:", req_data
respon_data = mock(acct_id).send(req_data)
#print "响应密文:", respon_data
if respon_data != None:
respon_data = prpcrypt(key, iv).decrypt(respon_data)
respon_data = json.loads(respon_data)
#print "响应原文:", respon_data
if respon_data[‘retcode‘] == ‘000000‘:
print "credit service running"
else:
print "fail"
else:
print "fail"

原文地址:http://blog.51cto.com/13945009/2166124

时间: 2024-10-13 15:45:59

python base64 crypto产品加密案例的相关文章

Python中的Base64编码的加密与解密

Base64 可以干些啥? Base64编码的作用: 由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法. 图片(and种子)base64编码传输 一种常用的内容快速加密方法(不安全,防君子不防小人) 为什么要使用 Base64 编码? 在网页图片传输中,一般在处理极小.极简的一些图片的时候可以使用到base64编码将图片直接写入css文件展示到网站上. 快速加密,常用与邮件内容传输,网站简单内容加密,跟MD5加密算法的区别在于这种算

python AES 双向对称加密解密

高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一.AES只是个基本算法,实现AES有若干模式.其中

神级程序员带来:用python有证书的加密解密实现方法!

本文实例讲述了python有证书的加密解密实现方法.分享给大家供大家参考.具体实现方法如下: 最近在做python的加解密工作,同时加完密的串能在php上能解出来,网上也找了一些靠谱的资料,刚好也有时间我就总结了一下python在加密与解密这块的代码,今后可能还能用的上.相对于php而言python这块加解密组件较多的,分别是: 一. RSA标准方式生成的证书 1.加密解密.加密签名.验证加密签名 代码如下: #encoding: utf8 import os import M2Crypto #

简谈-Python爬虫破解JS加密的Cookie

通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的

iOS开发之 AES+Base64数据混合加密与解密

2016-04-08 09:03 编辑: liubinqww 分类:iOS开发 来源:liubinqww 投稿 4 889 "APP的数据安全已经牵动着我们开发者的心,简单的MD5/Base64等已经难以满足当下的数据安全标准,本文简单的介绍下AES与Base64的混合加密与解密" AES:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES

java进阶12 Base64 UrlBase64 Hex 加密 解密技术

java的加密与解密技术: 现在的加密技术主要有 单向加密算法:以MD5 SHA算法为代表 对称加密算法:以DES 三重DES AES PBE算法为代表 非对称加密算法:以RSA为代表 简要的说下这三种加密算法的区别 先是单向加密算法,顾名思义,它不会有密钥,因为它是单向的,加密之后无法解密,就连程序猿都无法知道加密之后的东西是什么 主要用处是数据完整性的验证. 对称加密算法,其特征是公钥与私钥相同.一般用来数据储存,比如将数据加密之后存入数据库,那么数据库管理员就无法泄密数据库中的类容 有密钥

MD5加密案例

MD5加密案例 最近在做权限有关的案例,需要用到MD5加密技术,所以在此拿出来分享一下: 下面这块代码不仅包括MD5加密,还有SHA1加密技术: public class MD5Utils { public static String getMD5(String comeString) { String s = null; char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', '

通过php base64函数进行加密解密

通过php base64函数进行加密解密 实验环境:windowsphp环境 (phpStudy一键环境包) 把测试的php文件放到此目录下 键入以下代码 <?php $cany = 'getshell.top'; #定义要加密的字符串 echo base64_encode($cany); #输出加密后的字符串 ?> 已经经过base64函数进行了加密 下面把加密后的字符串复制 更改代码 如下: <?php $cany = 'Z2V0c2hlbGwudG9w'; #放入刚才加密的字符串

sha1、base64、ase加密

<!DOCTYPE html><html><head><title>sha1.base64.ase加密</title><meta charset="utf-8" ><meta name="renderer" content="webkit"><meta name="author" content="XYB" />