详细代码,使用python和pyside,des八选一功能,是指在界面做一个八选一的按钮,把des的八个s盒放进去,功能是选中期其中一个s盒,输入六bit,可以输出对应4bit
时间: 2024-06-08 08:10:33 浏览: 95
以下是使用Python和PySide实现的简单代码,实现了一个DES的八选一功能界面。其中包括八个按钮对应DES的八个S盒,以及一个输入框和一个输出框。
``` python
import sys
from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QVBoxLayout, QHBoxLayout
# DES的8个S盒
S_boxes = [
# S1
[
[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],
[0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],
[4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],
[15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]
],
# S2
[
[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],
[3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],
[0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],
[13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]
],
# S3
[
[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],
[13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],
[13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],
[1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]
],
# S4
[
[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],
[13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],
[10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],
[3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]
],
# S5
[
[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],
[14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],
[4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],
[11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]
],
# S6
[
[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],
[10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],
[9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],
[4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]
],
# S7
[
[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],
[13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],
[1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],
[6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]
],
# S8
[
[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],
[1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],
[7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],
[2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]
]
]
class DES_GUI(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建八个按钮
self.buttons = []
for i in range(8):
button = QPushButton("S{}".format(i+1))
button.clicked.connect(lambda _, x=i: self.update_output(x))
self.buttons.append(button)
# 创建输入框和输出框
self.input_box = QLineEdit()
self.output_box = QLabel()
# 创建布局并添加控件
vbox = QVBoxLayout()
for button in self.buttons:
vbox.addWidget(button)
hbox = QHBoxLayout()
hbox.addWidget(QLabel("输入:"))
hbox.addWidget(self.input_box)
vbox.addLayout(hbox)
hbox = QHBoxLayout()
hbox.addWidget(QLabel("输出:"))
hbox.addWidget(self.output_box)
vbox.addLayout(hbox)
# 设置窗口布局
self.setLayout(vbox)
# 设置窗口大小和标题
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('DES八选一')
def update_output(self, index):
# 获取输入的6个bit
input_str = self.input_box.text()
if len(input_str) != 6:
return
input_bits = [int(c) for c in input_str]
# 计算输出的4个bit
s_box = S_boxes[index]
row = input_bits[0] * 2 + input_bits[5]
col = input_bits[1] * 8 + input_bits[2] * 4 + input_bits[3] * 2 + input_bits[4]
output_bits = [int(c) for c in bin(s_box[row][col])[2:].zfill(4)]
# 更新输出框
self.output_box.setText("".join(str(c) for c in output_bits))
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = DES_GUI()
gui.show()
sys.exit(app.exec_())
```
在代码中,我们首先定义了DES的八个S盒,并在`__init__`方法中创建了八个按钮,每个按钮对应一个S盒,并且连接到了`update_output`方法,该方法会在按钮被点击时被调用。该方法会获取输入框中的6个bit,然后根据选中的S盒计算出对应的4个bit,并将其更新到输出框中。
最后,我们创建了一个`DES_GUI`类,该类继承自`QWidget`,并在`initUI`方法中创建了八个按钮、一个输入框和一个输出框,并将它们添加到了窗口布局中。在`update_output`方法中,我们计算出对应的4个bit,并将其更新到输出框中。最后,我们创建了一个应用程序对象并显示窗口。
阅读全文