multipartfile转化为file_Python01 Base64转换为Hex

Python-01 Base64转换为Hex

第一个python程序编写的小工具,提取网页xml文件中ECU key编码对应的base64字符串并将其转换为Hex格式的编码。优化GUI界面设计使其更加人性化的。

4f15338fb52b04ff157dae23b7d7f843.png

功能介绍:

1.    点击按钮“Openkey xml file",选择加载需要待解析的xmlkey文件。

2.    点击按钮“Conversion",实现Base64到Hex字符串的功能转换。

3.    点击按钮  "Open Key Txt"打开记录字符串编码转换的txt格式文件。Output Key file记录txt文件名以及存储在运行程序下的路径。

Python主程序源代码:

主程序需要引用以下第三方库,其中包含部分Python自带的库函数

库名

用途

是否需要额外安装

xml.dom.mindom

用于解析xml格式文件

自带库

base64

Base64字符串转化为Hex

自带库

sys

向txt文档输入多行文本

自带库

os

打开txt文本

自带库

PyQt

GUI界面设计调用

需要额外安装

BaseToHex.py

#2020-09-16  Base64 To Hex @翔哥
#coding=utf-8import  xml.dom.minidomimport base64import sysimport os#调用PyQt5生成的GUI界面需要导入的库from KeyConver import Ui_MainWindowfrom PyQt5.QtWidgets import QMainWindow,QApplication,QPushButton, QFileDialog,QStyleFactoryimport global_variant as glclass DemoMain(QMainWindow,Ui_MainWindow):def __init__(self,parent=None):super(DemoMain,self).__init__(parent)#self.initUI(self)self.setupUi(self)  #调用Ui_Mainwindow中的函数setupUi实现显示界面#add funtion to buttonself.pushButton_ChooseFile.clicked.connect(self.open_file)self.pushButton_ConverKey.clicked.connect(self.display)self.pushButton.clicked.connect(self.open_txt)def initUI(self):self.desktop=QApplication.desktop()#获取显示器分辨率self.screenRect = self.desktop.screenGeometry()self.height = self.screenRect.height()self.width = self.screenRect.width()self.show()def open_file(self):
        current_dir = __file__[:__file__.rfind('/')]
        gl.file_address =QFileDialog.getOpenFileName(self, "choose  ", current_dir)[0]self.lineEdit.setText(gl.file_address)self.getxml()def open_txt(self):
        os.system(gl.filepath)# base64解码解析为HEX codedef base64_decode(self,keycode):
        temp =base64.b64decode(keycode).hex()return str.upper(temp)def getxml(self):
        dom =xml.dom.minidom.parse(gl.file_address)  # 打开xml文档root =dom.documentElement  # 得到文档元素对象XdlUnnlock =dom.getElementsByTagName('key')
        XdlUnnlockRead = XdlUnnlock[0]
        gl.Base64Read =XdlUnnlockRead.firstChild.data          # 获得标签对之间的数据 即获取XdlUnnlockRead对应的字符串密码gl.HexRead = self.base64_decode(gl.Base64Read)
        XdlUnnlockWrite = XdlUnnlock[1]
        gl.Base64Write =XdlUnnlockWrite.firstChild.data        # 获得标签对之间的数据 即获取XdlUnnlockWrite对应的字符串密码gl.HexWrite = self.base64_decode(gl.Base64Write)
        XdlUnnlockExcute = XdlUnnlock[2]
        gl.Base64Excute =XdlUnnlockExcute.firstChild.data       # 获得标签对之间的数据 即获取XdlUnnlockExcute对应的字符串密码gl.HexExcute = self.base64_decode(gl.Base64Excute)# 获取标签的属性 即获取ECU的硬件版本号以及序列号itemlist =root.getElementsByTagName('ecu')
        item = itemlist[0]
        gl.SerialNumber =item.getAttribute("serialNumber")
        gl.ECUTemicNumber =gl.SerialNumber[0:2] +"."+gl.SerialNumber[2:6]+"-"+gl.SerialNumber[6:10]+"."+gl.SerialNumber[10]
        gl.ECUSerialNumber =gl.SerialNumber[15:]
        gl.filepath =  gl.ECUTemicNumber + "_" +gl.ECUSerialNumber + ".txt"def display(self):self.getxml()self.lineEdit_ECUPN.setText(gl.ECUTemicNumber)self.lineEdit_3.setText(gl.ECUSerialNumber)self.lineEdit_4.setText(gl.Base64Read)self.lineEdit_5.setText(gl.Base64Write)self.lineEdit_6.setText(gl.Base64Excute)self.lineEdit_7.setText(gl.HexRead)self.lineEdit_8.setText(gl.HexWrite)self.lineEdit_9.setText(gl.HexExcute)self.lineEdit_2.setText(gl.filepath)## 输出Txt文本文件current =sys.stdout     # 保存当前的sys.stdout状态, 开始捕获当前的输出textFile = open(gl.filepath,"wt")
        sys.stdout = textFile    # 这一步实际是sys.stdout.write, 当sys捕获到了print输出的时候, 就写入textFile里面print("ECU TemicP/N : {}".format(gl.ECUTemicNumber))print("ECU SerialNumber: {}\n".format(gl.ECUSerialNumber))print("XdlUnlockReadBase 64 is: \n{} \nXdlUnlockRead HEX strings:\n{} \n".format(gl.Base64Read,gl.HexRead))print( "XdlUnlockWriteBase 64 is: \n{} \nXdlUnlockWrite HEX strings:\n{} \n".format(gl.Base64Write,gl.HexWrite))print("XdlUnlockExcuteBase 64 is: \n{} \nXdlUnlockExcute HEX strings:\n{} \n".format(gl.Base64Excute,gl.HexExcute))
        sys.stdout = current          #恢复状态,之后的print内容不再捕获textFile.close()if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Windows"))  # ['windowsvista', 'Windows', 'Fusion']Win_Base64toHex =DemoMain()
    Win_Base64toHex.show()
    sys.exit(app.exec_())

全局变量的定义文件

global_variant.py

global SerialNumberglobal file_addressglobal Base64Excuteglobal Base64Writeglobal Base64Readglobal HexExcuteglobal HexWriteglobal HexReadglobal ECUTemicNumberglobal ECUSerialNumberglobal filepath

PyQt5-tools 设计自动编译生成的KeyConver.py

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'KeyConver.ui'
# Created by: PyQt5 UI code generator 5.15.0#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.frmPyQt5import QtCore, QtGui, QtWidgetsclassUi_MainWindow(object):def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        MainWindow.resize(585, 346)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        MainWindow.setFont(font)
        MainWindow.setStatusTip("")
        MainWindow.setAnimated(False)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)self.gridLayout.setObjectName("gridLayout")self.label_7 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_7.setFont(font)self.label_7.setTextFormat(QtCore.Qt.RichText)self.label_7.setAlignment(QtCore.Qt.AlignCenter)self.label_7.setObjectName("label_7")self.gridLayout.addWidget(self.label_7, 5, 6, 1, 1)self.label_3 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_3.setFont(font)self.label_3.setTextFormat(QtCore.Qt.RichText)self.label_3.setObjectName("label_3")self.gridLayout.addWidget(self.label_3, 6, 0, 1, 1)self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_5.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.lineEdit_5.setFont(font)self.lineEdit_5.setObjectName("lineEdit_5")self.gridLayout.addWidget(self.lineEdit_5, 7, 1, 1, 4)self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_3.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setBold(False)
        font.setWeight(50)self.lineEdit_3.setFont(font)self.lineEdit_3.setObjectName("lineEdit_3")self.gridLayout.addWidget(self.lineEdit_3, 3, 6, 1, 1)self.label_Title_2 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_Title_2.setFont(font)self.label_Title_2.setTextFormat(QtCore.Qt.RichText)self.label_Title_2.setAlignment(QtCore.Qt.AlignCenter)self.label_Title_2.setObjectName("label_Title_2")self.gridLayout.addWidget(self.label_Title_2, 11, 5, 1, 2)self.lineEdit_8 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_8.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setBold(False)
        font.setWeight(50)self.lineEdit_8.setFont(font)self.lineEdit_8.setObjectName("lineEdit_8")self.gridLayout.addWidget(self.lineEdit_8, 7, 5, 1, 2)self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_2.setObjectName("lineEdit_2")self.gridLayout.addWidget(self.lineEdit_2, 10, 1, 1, 6)self.lineEdit_9 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_9.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setBold(False)
        font.setWeight(50)self.lineEdit_9.setFont(font)self.lineEdit_9.setObjectName("lineEdit_9")self.gridLayout.addWidget(self.lineEdit_9, 8, 5, 1, 2)self.label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label.setFont(font)self.label.setTextFormat(QtCore.Qt.RichText)self.label.setObjectName("label")self.gridLayout.addWidget(self.label, 3, 0, 1, 1)self.lineEdit_7 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_7.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.lineEdit_7.setFont(font)self.lineEdit_7.setObjectName("lineEdit_7")self.gridLayout.addWidget(self.lineEdit_7, 6, 5, 1, 2)self.label_4 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_4.setFont(font)self.label_4.setTextFormat(QtCore.Qt.RichText)self.label_4.setObjectName("label_4")self.gridLayout.addWidget(self.label_4, 7, 0, 1, 1)self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_6.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.lineEdit_6.setFont(font)self.lineEdit_6.setObjectName("lineEdit_6")self.gridLayout.addWidget(self.lineEdit_6, 8, 1, 1, 4)self.label_8 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_8.setFont(font)self.label_8.setTextFormat(QtCore.Qt.RichText)self.label_8.setObjectName("label_8")self.gridLayout.addWidget(self.label_8, 10, 0, 1, 1)self.label_5 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_5.setFont(font)self.label_5.setTextFormat(QtCore.Qt.RichText)self.label_5.setObjectName("label_5")self.gridLayout.addWidget(self.label_5, 8, 0, 1, 1)self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit.setEnabled(False)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.lineEdit.setFont(font)self.lineEdit.setObjectName("lineEdit")self.gridLayout.addWidget(self.lineEdit, 2, 1, 1, 6)self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_4.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.lineEdit_4.setFont(font)self.lineEdit_4.setObjectName("lineEdit_4")self.gridLayout.addWidget(self.lineEdit_4, 6, 1, 1, 4)self.label_2 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_2.setFont(font)self.label_2.setTextFormat(QtCore.Qt.RichText)self.label_2.setObjectName("label_2")self.gridLayout.addWidget(self.label_2, 3, 4, 1, 2)self.lineEdit_ECUPN = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_ECUPN.setEnabled(True)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setBold(False)
        font.setWeight(50)self.lineEdit_ECUPN.setFont(font)self.lineEdit_ECUPN.setObjectName("lineEdit_ECUPN")self.gridLayout.addWidget(self.lineEdit_ECUPN, 3, 1, 1, 3)self.pushButton_ConverKey = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)self.pushButton_ConverKey.setFont(font)self.pushButton_ConverKey.setObjectName("pushButton_ConverKey")self.gridLayout.addWidget(self.pushButton_ConverKey, 4, 3, 1, 2)self.pushButton_ChooseFile = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(14)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)self.pushButton_ChooseFile.setFont(font)self.pushButton_ChooseFile.setObjectName("pushButton_ChooseFile")self.gridLayout.addWidget(self.pushButton_ChooseFile, 1, 3, 1, 3)self.label_Title = QtWidgets.QLabel(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_Title.sizePolicy().hasHeightForWidth())self.label_Title.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)self.label_Title.setFont(font)self.label_Title.setTextFormat(QtCore.Qt.RichText)self.label_Title.setAlignment(QtCore.Qt.AlignCenter)self.label_Title.setObjectName("label_Title")self.gridLayout.addWidget(self.label_Title, 0, 2, 1, 4)self.label_6 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)self.label_6.setFont(font)self.label_6.setTextFormat(QtCore.Qt.RichText)self.label_6.setAlignment(QtCore.Qt.AlignCenter)self.label_6.setObjectName("label_6")self.gridLayout.addWidget(self.label_6, 5, 2, 1, 2)self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setBold(False)
        font.setWeight(50)self.pushButton.setFont(font)self.pushButton.setObjectName("pushButton")self.gridLayout.addWidget(self.pushButton, 9, 3, 1, 2)
        MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 585, 18))self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label_7.setText(_translate("MainWindow", "Hex"))self.label_3.setText(_translate("MainWindow", "XdlUnlockRead:"))self.label_Title_2.setText(_translate("MainWindow", "X. Yu@ Continetal VED R&D China"))self.label.setText(_translate("MainWindow", "ECU Temic P/N :"))self.label_4.setText(_translate("MainWindow", "XdlUnlockWrite:"))self.label_8.setText(_translate("MainWindow", "Output file:"))self.label_5.setText(_translate("MainWindow", "XdlUnlockExecute:"))self.label_2.setText(_translate("MainWindow", "ECU Serial Number :"))self.pushButton_ConverKey.setText(_translate("MainWindow", "Conversion"))self.pushButton_ChooseFile.setText(_translate("MainWindow", "Open key xml file"))self.label_Title.setText(_translate("MainWindow", "Base64 to Hex Conversion Tool V1.0"))self.label_6.setText(_translate("MainWindow", "Base 64"))self.pushButton.setText(_translate("MainWindow", "Open Key txt"))

以上为该程序的全部源代码。

关于UI界面设计出来之后,在不同分辨率的屏幕上面运行出现控件和字体变形状态。

可以通过设置“布局”—>“栅格布局(G)”来解决这个问题。设置之后,GUI界面被一体化,可以通过整体缩放。

ba5d3892ef1311191eaeb010f27681f3.png

最后,生成可执行程序.exe文件,运用cmd窗口pyinstaller指令生成。-w 用于不显示命令行窗体。

pyinstaller -F -w  D:\Documents\Python\Base64ToHex.py

Python的第一个小程序运用就分享到这里了,欢迎有问题下方留言探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值