sms4的S盒构造c实现
生活随笔
收集整理的這篇文章主要介紹了
sms4的S盒构造c实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
sms4算法中的s盒的構造是由三個函數(shù)復合而成的,公式為S(x)=L(I(L(x))),其中L(x)是仿射變換,而I(x)是逆變換。
仿射變換較為簡單,而在模2的伽羅瓦域上求多項式的逆則比較復雜。
基本的假設是:對于數(shù)字1011,表示的是x^3+x+1,即二進制數(shù)的第n位為1時表示x^(n-1)
S盒仿射變換實現(xiàn)
int change(int x){ ? ?int A1=0xA7; ? ?int flag; ? ?int result=0; ? ?int tem; ? ?int flag2; ? ?for(int i=0;i<8;i++){ ? ? ? ?flag=(A1 & 0x80)>>7; ? ? ? ?tem=x & A1; ? ? ? ?flag2=0; ? ? ? ?for(int j=0;j<8;j++){ ? ? ? ? ? ?flag2^=(tem & 1); ? ? ? ? ? ?tem>>=1; ? ? ? } ? ? ? ?result=result | (flag2<<i); ? ? ? ?A1=(A1<<1) | flag; ? } ? ?result^=0xd3; ? ?return result;}模2的伽羅瓦域上求多項式的逆
在模2的伽羅瓦域上的多項式的加法和減法都是異或運算
在模2的伽羅瓦域上的多項式乘法實現(xiàn)
int multiplication(int a,int b){ ? ?int tem=0; ? ?int i=0; ? ?while(b){ ? ? ? ?if(b&1){ ? ? ? ? ? ?tem^=a<<i; ? ? ? } ? ? ? ?i++; ? ? ? ?b>>=1; ? } ? ? ?return tem;}在模2的伽羅瓦域上的多項式除法實現(xiàn)
int length(int x){ ? ?int i=0; ? ?int comp=1; ? ?while(1){ ? ? ? ?if(comp>=x){ ? ? ? ? ? ?return i; ? ? ? } ? ? ? ?comp=(comp<<1)+1; ? ? ? ?i++; ? }}?void division(int a,int b,int* round,int* left){ ? ?*round=0; ? ?*left=0; ? ?int distance; ? ?while(1){ ? ? ? ?distance=length(a)-length(b); ? ? ? ?if(distance>=0 && a){ ? ? ? ? ? ?a=a ^ (b<<distance); ? ? ? ? ? ?*round=(*round) | (1<<distance); ? ? ? }else{ ? ? ? ? ? ?*left=a; ? ? ? ? ? ?break; ? ? ? } ? } ? }在模2的伽羅瓦域上的多項式求逆(采用擴展歐幾里德算法)
//該函數(shù)表示在模a的情況下,b的逆int inverse(int a,int b){ ? ?int x2=1; ? ?int x1=0; ? ?int y2=0; ? ?int y1=1; ? ?int temX1,temY1; ? ?int q,r,x,y; ? ?int i; ? ?while(b){ ? ? ? ?division(a,b,&q,&r); ? ? ? ?//x=x2^multiplication(q,x1); ? ? ? ?y=y2^multiplication(q,y1);? ? ? ? ?a=b; ? ? ? ?b=r; ? ? ? ?//x2=x1; ? ? ? ?//x1=x; ? ? ? ?y2=y1; ? ? ? ?y1=y; ? } ? ?return y2;}
打印S盒的結果
int main(void){ ? ?for(int i=0;i<=0xf;i++) ? ? ? ?printf("\t%x",i); ? ?printf("\n"); ? ?for(int i=0;i<=0xf;i++){ ? ? ? ?printf("%x",i); ? ? ? ?for(int j=0;j<=0xf;j++){ ? ? ? ? ? ?printf("\t%x",change(inverse(0x1f5,change((i<<4)|j)))); ? ? ? } ? ? ? ?printf("\n"); ? }? ? ?return 0;}
總結
以上是生活随笔為你收集整理的sms4的S盒构造c实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 归一化数字角频率_说一说信号与系统中的“
- 下一篇: 2个25Ge网口做bond(mode4)