Python-01 Base64转换为Hex
第一个python程序编写的小工具,提取网页xml文件中ECU key编码对应的base64字符串并将其转换为Hex格式的编码。优化GUI界面设计使其更加人性化的。
功能介绍:
1. 点击按钮“Open key xml file",选择加载需要待解析的xml key文件。
2. 点击按钮“Conversion",实现Base64到Hex字符串的功能转换。
3. 点击按钮 "Open Key Txt"打开记录字符串编码转换的txt格式文件。Output Key file记录txt文件名以及存储在运行程序下的路径。
Python主程序源代码:
主程序需要引用以下第三方库,其中包含部分Python自带的库函数
BaseToHex.py
全局变量的定义文件
global_variant.py
global SerialNumber
global file_address
global Base64Excute
global Base64Write
global Base64Read
global HexExcute
global HexWrite
global HexRead
global ECUTemicNumber
global ECUSerialNumber
global 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.
from PyQt5import QtCore, QtGui, QtWidgets
class Ui_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界面被一体化,可以通过整体缩放。
最后,生成可执行程序.exe文件,运用cmd窗口pyinstaller指令生成。-w 用于不显示命令行窗体。
pyinstaller -F -w D:\Documents\Python\Base64ToHex.py
附加载解析的xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<keys>
<ecuKeys>
<ecu serialNumber="28516457303000091953002116">
<key identifier="XdlUnlockRead_0" algo="AES_CMAC_128">UucE2qkIN0I8pAeCHUJkFg==</key>
<key identifier="XdlUnlockWrite_0" algo="AES_CMAC_128">1bGy+UMVYxZ0DiBdiXUQxg==</key>
<key identifier="XdlUnlockExecute_0" algo="AES_CMAC_128">361ohamLsKwR++SYB0Ti+Q==</key>
<key identifier="JtagPassword" algo="PASSWORD_256">DybznQ0BMDPhua22G068GLsCIqeLV/I3eyounvFcXNY=</key>
<key identifier="PassModule0Password" algo="PASSWORD_256">c9SQQWBF1Tt5U+XdRziNYqdDuL6qdeSM90uCS0T935c=</key>
<key identifier="PassModule1Password" algo="PASSWORD_256">zd6sjNhREy/3sK71y54zaGBDvI3rV845h11DXraXcUw=</key>
<key identifier="PassModule2Password" algo="PASSWORD_256">u1aiVphz+iVz1qIvz6KKByrKarJT+tt8j2YnQJtJbC4=</key>
<key identifier="PassModule3Password" algo="PASSWORD_256">srCd5tdCD6G+LHcdCYWy/mN7EVR/oZxbfm1CY7/d1zo=</key>
</ecu>
</ecuKeys>
</keys>
Python的第一个小程序运用就分享到这里了,欢迎有问题下方留言探讨。