python 3des加密_使用Python进行3DES加密-pyDes

--

layout: blog

title: '使用Python进行3DES加密-pyDes'

date: 2017-06-01 12:11:34

categories: blog

tags: code

image: ''

lead-text: 'Python利用pyDes进行3DES加密'

选择PyDes

在进行请求前使用3DES进行加密获取一个加密后的code添加到请求头,为了方便,不用每次跑程序就写了一个简单的

利用Python进行3DES加密的东西,说起来简单,最后页只有一点点代码,不过在找到合适的加密方法,以及计算出和

和Java代码一样的结果前花了很多时间。其中使用了包括 M2Crypto 和 Crypto这样的库,不过没有得到正确的结果- -。最后使用PyDes中的获得了正确的东西。

代码

#!/usr/bin/env python

# encoding=utf-8

import base64

import hashlib

import os

import pyDes

import sys

global secret_key

secret_key = ""

param_dict = {}

param_array = []

def get_key():

return '234567892345678923456789'

pass

def get_text(params=[]):

result = ""

for param in params:

result += param

pass

pass

def get_text(params={}):

result = ""

for (k, v) in params:

result += v

pass

pass

def encrypt(key="", text=""):

if text is None:

text = ""

print "加密字符串为空,请确保文件格式"

return

pass

print '加密字符串:', text

print '密钥:', key

k = pyDes.triple_des(key, pyDes.ECB, IV=None, pad=None, padmode=pyDes.PAD_PKCS5)

d = k.encrypt(text)

res = base64.standard_b64encode(d)

# 替换空格和换行

res.replace("\n", "")

res.replace("\t", "")

res.replace("\r\n", "")

res.strip("\n")

print 'validatecode:', to_md5(res).upper()

def to_md5(src=""):

m2 = hashlib.md5()

m2.update(src)

return m2.hexdigest()

def parse_file(file_content=""):

global secret_key

lines = file_content.split("\n")

# print "分解行:", lines

for line in lines:

if line.startswith("#"):

continue

pass

line_array = line.split(":")

if len(line_array) == 1:

secret_key = line

pass

elif len(line_array) == 2:

k = line_array[0]

value = line_array[1]

k.replace("\r\n", "")

value.replace("\r\n","")

param_dict[k] = value

param_array.append(value)

pass

# print line

# print param_dict

def create_param_string(dic):

param_string = ""

for k in dic:

param_string += k

pass

return param_string

pass

if __name__ == "__main__":

# 获取参数

vars = sys.argv

if len(vars) == 2:

v = vars[1]

if v == '--help':

print "添加 -f 参数添加文件绝对路径"

print "文件格式 # 表示注释"

print "如果只有一行,那么表示加密的密钥(key)"

print "参数行,形式如字典格式 key:value"

print "例子:"

print "python validate.py -f /usr/a.txt"

pass

elif len(vars) == 3:

if vars[1] == "-f":

file_path = vars[2]

file_exist = os.path.exists(file_path)

if file_exist:

file = open(file_path, 'r')

file_content = file.read()

# 解析参数文件

parse_file(file_content)

param_string = create_param_string(param_array)

encrypt(secret_key, param_string)

# print "读取文件:\n", file_content

pass

else:

print "文件不存在!"

pass

else:

pass

上面的代码比较简单,读取一个文本文件中的内容,获取到一个数组,将数组进行拼接,拼接后的字符串

加密就好了,核心就是利用 pyDes.triple_des() 进行加密,之后利用获取的base64字符串去掉空格和换行

去掉换行和空格这个算事重要的点,容易忘记,最后再做一次md5转换

总结

具体的原理不太清楚,比较麻烦的点是triple_des转换,然后base64,然后md5,重要的是去除空格和换行,

项目中iOS的代码由于没有进行去除空格和换行导致在字符串比较多的时候产生了和Java不同的加密结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值