由於老大需要對日志進行解析,獲取到相應樁的信息,所以我寫了個專門的解析腳本,就是執行的時間有點長,如果用java的話應該可以快2/3.練一下python.
- 在該腳本中遇到的問題就是des解密的時候有一個固定8位的key.當時使用32位的長key,每次都報錯,后來發現可以先使用8位空key設置,再setKey(KEY)為32位的.
- 解析截取到的數據時,看似json格式,其實並不是,所以單寫了個解析方法.
# -*- coding: utf-8 -*-
import os
import linecache # 對文件進行行緩存,可以直接取到想要的行值
import base64 # base64解碼
import pandas as pd # 進行格式化數據
from pyDes import *
from Crypto import Random
import sys
from urllib import parse # 進行urlencode
import time # 記錄時間
import json # json轉化
FILEDIR = r'E:\aaa'
KEY = '' # 秘鑰
PILENUMBERS = ['1011895210701234176-1',
'1011895210701234176-2',
'1011895284617453568-1',
'1011895284617453568-2',
'1011895333984407552-1',
'1011895333984407552-2',
'1011895376523038720-1',
'1011895376523038720-2',
'1011895424895950848-1',
'1011895424895950848-2']
def read_file(filelist):
time = []
cipherText = []
plainText = []
for filename in filelist:
filename = FILEDIR + '\\' + filename
if os.path.exists(filename):
cache_data = linecache.getlines(filename)
for line in range(len(cache_data)):
if r'DES》》Base64后' in cache_data[line]:
str = cache_data[line][len('>DES》》Base64后>'):]
plain = des_decrypt(str)
s2 = analysis(plain)['pileNumber']
if s2 in PILENUMBERS:
time.append(cache_data[line + 3][0:len('2019-03-12 20:13:04')])
cipherText.append(str)
plainText.append(plain)
dataframe = pd.DataFrame({'時間': time, '密文': cipherText, '明文': plainText})
dataframe.to_csv(FILEDIR + '\\' + 'wx.csv', index=False, sep=',', encoding='gbk')
# 獲取文件夾下所有的文件
def file_name(filedir):
filelist = os.listdir(filedir)
return filelist
# des解密
def des_decrypt(str):
cipherX = des(key=' ', IV=Random.new().read(8), pad=None, padmode=PAD_PKCS5)
cipherX.setKey(KEY)
b = cipherX.decrypt(base64.b64decode(str))
return parse.unquote(bytes.decode(b)).replace('+', '')
# 解析{uid='61916',terminal='web',id='61916',pileNumber='1011895424895950848-2'}
yuan = r"{uid='61916',terminal='web',id='61916',pileNumber='1011895424895950848-2'}"
def analysis(str):
new_str = '{'
d = str.replace('=', ':')
for i in range(len(d.split(','))):
if '{' in d.split(',')[i].split(':')[0]:
key = "'" + d.split(',')[i].split(':')[0].replace('{', '') + "'"
else:
key = "'" + d.split(',')[i].split(':')[0] + "'"
if '}' in d.split(',')[i].split(':')[1]:
value = d.split(',')[i].split(':')[1].replace('}', '')
else:
value = d.split(',')[i].split(':')[1]
f = key + ':' + value
if 0 < i < len(d.split(',')):
new_str = new_str + ',' + f
elif i == 0:
new_str = new_str + f
return json.loads((new_str + '}').replace("'", '"'))
# print(analysis(yuan)['pileNumber'])
if __name__ == '__main__':
print('開始時間:', time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())))
read_file(file_name(FILEDIR))
print('結束時間:', time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())))