s盒的构造即c语言实现,AES中构造s盒中的乘法逆元的c语言实现

#include

#include

//二进制字符串转化成十进制

int bits_dec(char binary[])

{

int len=strlen(binary);

int i;

int sum=0,value=1;

for (i=len-1;i>=0;i--)

{

if(binary[i]=='1')

sum+=value;

value*=2;

}

return sum;

}

//计算一个十进制数的二进制表示时的位数有多大

//直接计算右移了多少位就可

int numb_bits(int v)

{

int count=0;

while(v>0)

{

v=v>>1;

count++;

}

return count;

}

//输出一个十进制数的二进制表示

void printf_bit(int a)

{

int n=numb_bits(a);

int i;

for(i=n-1;i>=0;i--)

{

if(1<

printf("1");

else

printf("0");

}

}

//多项式除法

int polydivide(int a,int b,int *remainder )

{

int tmp;

int c=numb_bits(a)-numb_bits(b);

int value=0;

while(c>=0)

{

value=(1<

tmp=b;//将被除数向左移c位再与a相与,并赋给a

tmp=tmp<

a=a^tmp;

c=numb_bits(a)-numb_bits(b);

}

*remainder=a;

return value;

}

//多项式乘法,算法就是书上96的算法

int polyMulti(int a,int b)

{

int value=a;

int result=a;

int r;

if(a==0 || b==0)

return 0;

r=b%2;

b=b/2;

if(!r) //判断最后一位是0还是1,是0的话result就等于0

result=0;

while(b)

{

r=b%2;

b=b/2;

if(value>>7) //b7为1,就要与00011011相与

value=(value<<1) & 0xff ^27;

else

value=(value<<1) & 0xff;

if(r) //位为1的结果就参加异或运算

result=result ^ value;

}

return result;

}

//扩展的欧几里德算法

int Ext_Euclid(int a,int b)

{

int tmp;

if(a

{

tmp=a;

a=b;

b=tmp;

}

int x0,y0,x1,y1;//初始化条件

x0=1;

y0=0;

x1=0;

y1=1;

int tmp1,tmp2;

int r1,r2,q1;

r1=a;

r2=b;

int i=1;

//下面直接用扩展欧几里德算法来做

while(r2)

{

tmp1=r2;

q1=polydivide(r1,r2,&r2);//r1对r2进行多项式除法,商存在q1,余数存在r2

r1=tmp1;//这步比较重要,就是r1要变成上一次除法的被除数

printf("q%d:\t",i);

printf_bit(q1);

printf("\tr%d:\t",i);

printf_bit(r2);

tmp1=x1;

tmp2=y1;

x1=x0 ^ polyMulti(q1,x1); //计算v,w;每一个v(x)*f(x)+w(x)*g(x)=1成立

y1=y0 ^ polyMulti(q1,y1);

printf("\tv%d:\t",i);

printf_bit(x1);

printf("\tw%d:\t",i);

printf_bit(y1);

printf("\n\n");

x0=tmp1;

y0=tmp2;

i++;

}

return y0;

}

int main()

{

char c1[64],c2[64];

printf("请输入两个二进串(中间以空格隔开):\n");

scanf("%s%s",c1,c2);

printf_bit(Ext_Euclid(bits_dec(c1),bits_dec(c2)));

printf("\n");

}

测试结果:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AES的S 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76 1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0 2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15 3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75 4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84 5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF 6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8 7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2 8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73 9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79 B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08 C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF F 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16 ################################################################################ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB 1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB 2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E 3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25 4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92 5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84 6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06 7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B 8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73 9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6E A 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4 C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F D 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EF E A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61 F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值