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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341