SageMath are un lucru grozav S-Box pachet care este utilizat intens de designerii S-Box. Dacă aveți de gând să învățați/jucați cu S-Box-uri, puteți beneficia de acest pachet.
Cu pachet Sbox (Încercați online)
din sage.crypto.sbox import SBox
#trebuie să fie puterea a două, altfel eroare
p = Permutări(interval(16)).element_aleatoriu()
S = SBox(p);
print("Permutarea", S)
print(„Permutarea inversă”, S.inverse())
SageMath utilizează în prezent Python3, astfel încât se poate scrie versiunea foarte ușor fie în Python, fie în SageMath (Încercați online);
P = Permutări(interval(16)).element_aleatoriu()
print("Permutarea", P)
InverseP=[P.index(i) pentru i în interval (16)]
print(„Permutarea inversă”, InverseP)
După cum putem vedea pachetul S-Box este mult mai bun, de exemplu, construcția verifică dacă dimensiunea este egală cu o putere de 2 sau nu.
Notă: Am folosit permutări aleatorii pentru a garanta că există inversul.
După cum putem vedea din Sursa pachetului Sbox
m = self.input_size()
L = [self(i) pentru i în interval (1<<m)]
returnează SBox([L.index(i) pentru i în interval(1<<m)], big_endian=self._big_endian)
SageMath convertește S-Box într-o Listă, ia inversul pe listă, apoi construiește un S-Box pe listă. După cum putem vedea, inversul - dacă există - nu este magie.