SageMath มีประโยชน์มาก เอส-บ็อกซ์ แพ็คเกจที่นักออกแบบ S-Box ใช้งานอย่างหนัก หากคุณกำลังจะเรียนรู้/เล่นกับ S-Boxes คุณอาจได้รับประโยชน์จากแพ็คเกจนี้
ด้วยแพ็คเกจ Sbox (ลองออนไลน์)
จาก sage.crypto.sbox นำเข้า SBox
#ต้องยกกำลังสองมิฉะนั้นผิดพลาด
p = การเรียงสับเปลี่ยน (ช่วง (16)).random_element()
S = SBox(พี);
พิมพ์ ("การเปลี่ยนแปลง ", S)
พิมพ์ ("การเปลี่ยนแปลงผกผัน", S.inverse ())
ปัจจุบัน SageMath ใช้ Python3 ดังนั้นจึงเขียนเวอร์ชันได้อย่างง่ายดายทั้งใน Python หรือ SageMath (ลองออนไลน์);
P = การเรียงสับเปลี่ยน (ช่วง (16)).random_element()
พิมพ์ ("การเปลี่ยนแปลง ", P)
InverseP=[P.index(i) for i in range(16)]
พิมพ์ ("การเปลี่ยนแปลงผกผัน", InverseP)
ดังที่เราจะเห็นว่าบรรจุภัณฑ์ S-Box นั้นดีกว่ามาก เช่น การก่อสร้างตรวจสอบว่ามีขนาดเท่ากับยกกำลัง 2 หรือไม่
บันทึก: ฉันใช้การเรียงสับเปลี่ยนแบบสุ่มเพื่อรับประกันว่ามีสิ่งผกผันอยู่
ดังที่เราเห็นได้จาก ที่มาแพ็คเกจ Sbox
ม = self.input_size()
L = [ตัวเอง(i) สำหรับฉันในช่วง(1<<m)]
ส่งคืน SBox([L.index(i) สำหรับฉันในช่วง (1<<m)], big_endian=self._big_endian)
SageMath แปลง S-Box เป็นรายการ นำส่วนกลับของรายการ จากนั้นสร้าง S-Box ในรายการ ดังที่เราเห็นสิ่งที่ตรงกันข้าม - หากมีอยู่ - ไม่ใช่เวทมนตร์