背景:想给公司的进件流程写一套进件脚本,首先遇到的就是加密解密。公司用的 DES3 + base64 加密解密

一、安装  pycrypto模块,推荐用pycrypto编译文件,直接下载安装就行

http://www.voidspace.org.uk/python/modules.shtml#pycrypto

二、上代码,。此套代码是在 AES解密的基础上调整

#coding=utf-8
from Crypto.Cipher import _DES3 #加密解密方法
import base64
BS = _DES3.block_size
import json
import requests
def pad(s):
return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
#定义 padding 即 填充 为PKCS7 def unpad(s):
return s[0:-ord(s[-1])] class prpcrypt():
def __init__(self, key):
self.key = key
self.mode = _DES3.MODE_CBC
self.iv = IV
# DES3的加密模式为CBC
def encrypt(self, text):
text = pad(text)
cryptor = _DES3.new(self.key, self.mode, self.iv)
#self.iv 为 IV 即偏移量
x = len(text) % 8
if x != 0:
text = text + '\0' * (8 - x) # 不满16,32,64位补0
# print(text)
self.ciphertext = cryptor.encrypt(text)
return base64.standard_b64encode(self.ciphertext).decode("utf-8") def decrypt(self, text):
cryptor = _DES3.new(self.key, self.mode, self.iv)
de_text = base64.standard_b64decode(text)
plain_text = cryptor.decrypt(de_text)
# st = str(plain_text.decode("utf-8")).rstrip('\0')
# out = unpad(st)
# return out
#上面注释内容解密如果运行报错,就注释掉试试
return plain_text
if __name__ == '__main__':
iv = "******"    #IV偏移量
pc = prpcrypt('******') # 自己设定的密钥
message = {"ARRAYDATA":
{"FACILITYID":"","FACILITYNAME":"","FACILITYTYPE":"","PASSWORD":"***","USERNO":"***"},
"TOKEN":"***",
         } js = json.dumps(message)    #字典转str,再加密
print type(js)
e = pc.encrypt(js) # 加密内容
d = pc.decrypt(e) #解密内容
print e #加密后
print d #解密后
  
  url = "***"
  header = {"Content-Type":"application/x-www-form-urlencoded",
  "Accept-Encoding": "gzip",
  "User-Agent": "okhttp/3.8.0"}
  message1 ={"message":e}
  r = requests.post(url,headers=header,data=message1)   text1 = r.text
  print text1
  d1 = pc.decrypt(text1)
  print d1
 
  r = re.findall('\{(.+)\}',d1)        #取值,对于返回值后面带有特殊字符,如空格、\等
  d = eval("{"+r[0]+"}") #str转化成字典
  token = d["ARRAYDATA"]["TOKEN"]  #字典取值
  print token
												

python DES3 加密解密的更多相关文章

  1. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 使用python进行加密解密AES算法

    使用python进行加密解密AES算法-代码分享-PYTHON开发者社区-pythoner.org 使用python进行加密解密AES算法 TY 发布于 2011-09-26 21:36:53,分类: ...

  3. Python常用加密解密算法

    MD5加密 简介 这是一种使用非常广泛的加密方式,不可逆的,常见16位和32位一般都是md5 实现 import hashlib data = '你好' print(hashlib.md5(data. ...

  4. python rsa 加密解密 (编解码,base64编解码)

    最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...

  5. python RSA加密解密及模拟登录cnblog

    1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...

  6. python Crypto 加密解密

    本片文字记录使用python 的Crypto 工具对图片或者文本进行加密解密的方法: import numpy as np from PIL import Image from base64 impo ...

  7. [Python] 字符串加密解密

    1. 最简单的方法是用base64: import base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1 ...

  8. python AES加密解密 pycryptodome

    环境 pyhton3.6 博主为了解码 AES 用了1天的时间,安了各种包,然而走了很多坑,在这里给大家提供一个简便的方法 首先在命令行(推荐)  pip install Crypto 你会发现安装下 ...

  9. python pycryptodome 加密解密

    pip3 install pycryptodome my_private_rsa_key.bin -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu ...

随机推荐

  1. PHP代码审计学习之命令执行漏洞挖掘及防御

    [1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...

  2. SessionListener失败,退出

    配置如下: web.xml: <listener> <listener-class>cn.edu.hbcf.common.listener.SessionListener< ...

  3. MongoDB 连接数高产生原因及解决

    MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念:tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显.参考 ...

  4. Android显示GIF动画(转载)

    GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediaplay来显示这个问题的项目,其用法和 ImageView一样,支持gif图片 使用方法: 1-把Gi ...

  5. Des加密方法

    //默认密钥向量 private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; private st ...

  6. Python笔记8:网络编程

    python内置封装了很多常见的网络协议的库,因此python成为了一个强大的网络编程工具,这里是对python的网络方面编程的一个简单描述. urllib 和 urllib2模块 urllib 和u ...

  7. 消耗资源的SQL的定位方法;

    解答:select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/execu ...

  8. SQLServer2008设置开启远程连接

    SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置:    1,SQL Serve ...

  9. 面试题思考:什么是 Java 的反射机制

    一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...

  10. 60、常规控件(3)Snackbar-可操作的提示框,Toast升级版

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=&quo ...