美文网首页
使用Python进行3DES加密-pyDes

使用Python进行3DES加密-pyDes

作者: J_xs | 来源:发表于2017-11-06 20:57 被阅读1398次

--
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添加到请求头,为了方便,不用每次跑程序就写了一个简单的</br>
利用Python进行3DES加密的东西,说起来简单,最后页只有一点点代码,不过在找到合适的加密方法,以及计算出和</br>
和Java代码一样的结果前花了很多时间。其中使用了包括 M2Crypto 和 Crypto这样的库,不过没有得到正确的结果- -。</br>最后使用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


上面的代码比较简单,读取一个文本文件中的内容,获取到一个数组,将数组进行拼接,拼接后的字符串</br>
加密就好了,核心就是利用 pyDes.triple_des() 进行加密,之后利用获取的base64字符串去掉空格和换行</br>
去掉换行和空格这个算事重要的点,容易忘记,最后再做一次md5转换</br>

总结

具体的原理不太清楚,比较麻烦的点是triple_des转换,然后base64,然后md5,重要的是去除空格和换行,</br>
项目中iOS的代码由于没有进行去除空格和换行导致在字符串比较多的时候产生了和Java不同的加密结果

相关文章

  • 使用Python进行3DES加密-pyDes

    --layout: blogtitle: '使用Python进行3DES加密-pyDes'date: 2017-0...

  • python 加密解密

    Python 利用 pyDes对字符串进行解密 base64加密解密 md5加密

  • 3DES加密

    本文介绍了3DES加密特性,加密特点,3DES是对称加密,用一个密钥对内容进行加密,必须使用相同的密钥进行解密, ...

  • iOS之DES加密

    项目是使用3DES算法,ECB分组加密模式。我们后端使用的加密过程:对明文进行十六进制编码,在使用3DES加密。i...

  • Java中的加密,[干货]

    1、对称加密算法,如:AES、DES、3DES对称秘钥加密,就是采用这种加密方法的双方使用方式用同样的密钥进行加密...

  • android 3DES加密和MD5加密

    经常使用加密算法:DES、3DES、RC4、AES,RSA等;对称加密:des,3des,aes非对称加密:rsa...

  • Android 加密解密的几种方式总结

    经常使用加密算法:DES、3DES、RC4、AES,RSA等; 对称加密:des,3des,aes 非对称加密:r...

  • iOS 常见加密方式 - 对称加密(3DES,AES)

    对称加密,是指使用单一密匙来进行加密和解密。目前较常见的对称加密有DES,3DES, AES等。原理类似,加密方式...

  • 3DES企业级加密与解密

    一、加密方案 HTTP请求参数以json密文传输使用3DES方式加密,3DES(data,KEY,IV),其中da...

  • python des加解密

    在python中进行des加解密处理,一般推荐的库例如 pyDes,pycrypto,如何使用网上有很多的介绍。以...

网友评论

      本文标题:使用Python进行3DES加密-pyDes

      本文链接:https://www.haomeiwen.com/subject/smrrmxtx.html