使用Python進(jìn)行3DES加密-pyDes

--
layout: blog
title: '使用Python進(jìn)行3DES加密-pyDes'
date: 2017-06-01 12:11:34
categories: blog
tags: code
image: ''
lead-text: 'Python利用pyDes進(jìn)行3DES加密'


選擇PyDes

在進(jìn)行請(qǐng)求前使用3DES進(jìn)行加密獲取一個(gè)加密后的code添加到請(qǐng)求頭,為了方便,不用每次跑程序就寫了一個(gè)簡(jiǎn)單的</br>
利用Python進(jìn)行3DES加密的東西,說(shuō)起來(lái)簡(jiǎn)單,最后頁(yè)只有一點(diǎn)點(diǎn)代碼,不過(guò)在找到合適的加密方法,以及計(jì)算出和</br>
和Java代碼一樣的結(jié)果前花了很多時(shí)間。其中使用了包括 M2Crypto 和 Crypto這樣的庫(kù),不過(guò)沒(méi)有得到正確的結(jié)果- -。</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 "加密字符串為空,請(qǐng)確保文件格式"
        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__":
    # 獲取參數(shù)
    vars = sys.argv
    if len(vars) == 2:
        v = vars[1]
        if v == '--help':
            print "添加 -f 參數(shù)添加文件絕對(duì)路徑"
            print "文件格式 # 表示注釋"
            print "如果只有一行,那么表示加密的密鑰(key)"
            print "參數(shù)行,形式如字典格式  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()

                # 解析參數(shù)文件
                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


上面的代碼比較簡(jiǎn)單,讀取一個(gè)文本文件中的內(nèi)容,獲取到一個(gè)數(shù)組,將數(shù)組進(jìn)行拼接,拼接后的字符串</br>
加密就好了,核心就是利用 pyDes.triple_des() 進(jìn)行加密,之后利用獲取的base64字符串去掉空格和換行</br>
去掉換行和空格這個(gè)算事重要的點(diǎn),容易忘記,最后再做一次md5轉(zhuǎn)換</br>

總結(jié)

具體的原理不太清楚,比較麻煩的點(diǎn)是triple_des轉(zhuǎn)換,然后base64,然后md5,重要的是去除空格和換行,</br>
項(xiàng)目中iOS的代碼由于沒(méi)有進(jìn)行去除空格和換行導(dǎo)致在字符串比較多的時(shí)候產(chǎn)生了和Java不同的加密結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 之前一直對(duì)加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對(duì)數(shù)據(jù)傳輸進(jìn)行加密,且各種加密算法各有...
    Henryzhu閱讀 3,214評(píng)論 0 14
  • 這篇文章主要講述在Mobile BI(移動(dòng)商務(wù)智能)開(kāi)發(fā)過(guò)程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲(chǔ)、登錄驗(yàn)證這幾個(gè)方面涉及的加密...
    雨_樹(shù)閱讀 3,038評(píng)論 0 6
  • 最近正好在項(xiàng)目中用到數(shù)據(jù)加密,于是從網(wǎng)上查閱一些資料,了解各種加密方式并寫代碼驗(yàn)證,就在本篇文章中做個(gè)總結(jié)吧。 我...
    落英墜露閱讀 5,723評(píng)論 1 9
  • Android安全加密專題文章索引 Android安全加密:對(duì)稱加密 Android安全加密:非對(duì)稱加密 Andr...
    JackChen1024閱讀 1,282評(píng)論 0 11
  • 看過(guò)關(guān)于曾國(guó)藩的一些故事,感覺(jué)他不僅是一個(gè)偉人更是一個(gè)有情趣的普通人。 話說(shuō)他的大兒子曾紀(jì)澤結(jié)婚,娶了一個(gè)媳婦兒,...
    Lesliewang閱讀 360評(píng)論 0 0

友情鏈接更多精彩內(nèi)容