Python-01 Base64转换为Hex

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的第一个小程序运用就分享到这里了,欢迎有问题下方留言探讨。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。