我是完全新编程,我发现这个代码在网络中我知道它的语法是正确的,但我不知道如何调用SAES_FromStateMatrix
函数,所以请帮助我 这里是代码在Python中调用函数
F = GF(2);
L.<a> = GF(2^4);
V = L.vector_space();
VF8 = VectorSpace(F, 8);
MixColumns_matrix = Matrix(L, [[1,a^2],[a^2,1]]);
InverseMixColumns_matrix = MixColumns_matrix.inverse();
SBox_matrix = Matrix(L,
[
[ 1 + a^3, a^2, a + a^3, 1 + a + a^3],
[ 1 + a^2 + a^3, 1, a^3, 1 + a^2],
[ a + a^2, a, 0, 1 + a],
[ a^2 + a^3, a + a^2 + a^3, 1 + a + a^2 + a^3, 1 + a + a^2]
]);
InverseSBox_matrix = Matrix(L,
[
[ a + a^3, 1 + a^2, 1 + a^3, 1 + a + a^3],
[ 1, 1 + a + a^2, a^3, 1 + a + a^2 + a^3],
[ a + a^2, 0, a, 1 + a],
[ a^2 + a^3, a^2, 1 + a^2 + a^3, a + a^2 + a^3]
]);
RCON = [
VF8([F(0), F(0), F(0), F(0), F(0), F(0), F(0), F(1)]),
VF8([F(0), F(0), F(0), F(0), F(1), F(1), F(0), F(0)])
];
def SAES_ToStateMatrix(block):
B = block
S00 = L(V([B[0], B[1], B[2], B[3]]));
S01 = L(V([B[4], B[5], B[6], B[7]]));
S10 = L(V([B[8], B[9], B[10], B[11]]));
S11 = L(V([B[12], B[13], B[14], B[15]]));
state_matrix = Matrix(L, [[S00,S01],[S10,S11]]);
return state_matrix;
def SAES_FromStateMatrix(state_matrix):
output = [];
for r in xrange(2):
for c in xrange(2):
v = V(state_matrix[r,c]);
for j in xrange(4):
output.append(Integer(v[j]));
return output;
'L. '这不是有效的Python语法,AFAIK(第2行) –
我也怀疑第3行。虽然有效,但不需要在Python中的每行之后放置';'。 – MacUsers
为了Python感知但Sage没有经验的读者的利益:'L. = GF(2^4)'是有效的Sage语法。 Sage preparser将其转换为'L = GF(Integer(2)** Integer(4),names =('a',)); (a,)= L._first_ngens(1)'幕后。 – DSM