ここにDES s-boxの線形近似テーブルを計算するための擬似コードがあります。
int x_i =0, y_i = 0, y_j=0,x_j =0, parity_11=0;
int temp=0;
for(x_i=0;x_i<64;x_i++){
for(y_i=0;y_i<16;y_i++){
for(x_j=0;x_j<64;x_j++){
y_j=sbox_1[x_j];
y_j=y_j&y_i;
temp=x_j&x_i;
parity_11=(parity(temp)+parity(y_j))%2;
parity_x_y[x_i][y_i]+=parity_11;
}
}
}
次のように完全なコードを見つけることができます:
static const char sbox_1[] = {
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
};
int parity(unsigned int x){
unsigned int count = 0, i, b = 1;
for(i = 0; i < 8; i++){
if(x & (b << i)){count++;}
}
if((count % 2)){return 1;}
return 0;
}
int parity_x_y[64][16] ={};
void print_xor(){
int i=0,j=0;
for(i=0;i<64;i++){
j=0;
for(j=0;j<16;j++){
printf("%d ",parity_x_y[i][j]);
}
printf("\n");
}
}
void print_LAT(){
int x_i =0, y_i = 0, y_j=0,x_j =0, parity_11=0;
int temp=0;
print_xor();
for(x_i=0;x_i<64;x_i++){
for(y_i=0;y_i<16;y_i++){
for(x_j=0;x_j<64;x_j++){
y_j=sbox_1[x_j];
y_j=y_j&y_i;
temp=x_j&x_i;
parity_11=(parity(temp)+parity(y_j))%2;
parity_x_y[x_i][y_i]+=parity_11;
}
}
}
int j=0;
print_xor();
}
int main(){
print_LAT();
return 0;
}
希望は、これが
こんにちはmaxx66を助け、私は数年のためのC++のコードを書いていないし、このコードはどの私は希望の宿題のためでした一度実行します。だから私は完璧なコードを書こうとしなかった。誰か(私のインストラクター)は、結果のLATテーブルをチェックし、それは真です。それが私にとって重要なことでした。あなたの時間と興味をありがとう:) –