通过以上五位移位寄存器产生扰乱序列,与原始输入序列异或相加,最后再通过与扰乱序列异或相加恢复成原始序列。
定义x1、x2两个序列,x1为全零序列,x2为随机序列,其62位0或1的数值由rand()函数产生;然后输出显示,之后通过operate子函数将序列传值过去进行加扰和解扰操作。
rand()函数的头文件为stdlib.h。
operate子函数 void operate(int x[62]){ int D[5] = { 0,1,0,0,1 };//五级移位寄存器 int y[62];//扰乱序列int y1[62];//扰乱后序列 int X[62];//x解扰后序列 //加扰器int D_24;for (int i = 0; i < 62; i++){y[i] = D[0];if (D[2] == D[4])D_24 = 0;elseD_24 = 1;for (int j = 4; j >= 1; j--)D[j] = D[j - 1];D[0] = D_24;}for (int i = 0; i < 62; i++){if (x[i] == y[i])y1[i] = 0;elsey1[i] = 1;} printf("n加扰后序列:n");for (int i = 0; i<62; i++)printf("%d", y1[i]);//解扰器for (int i = 0; i < 62; i++){if (y1[i] == y[i])X[i] = 0;elseX[i] = 1;}printf("n解扰后序列:n");for (int i = 0; i<62; i++)printf("%d", X[i]);printf("n");}x为传递过来的待处理的序列,y为通过五级扰码器产生的随机扰乱序列,y1为y序列与x序列做异或加之后的序列,X为通过解扰操作后的序列。
五级扰码器,五个序列对应的是D0、D1、D2、D3、D4,每次向右移一位。D0每次都为D2与D4异或加得到的值,最后得到的y序列是62次循环后每次D0的值。
将x序列与扰乱序列y每位分别做异或加得到y1序列。
输出扰乱后的序列。
将y1序列与干扰序列y再次做异或加,得到与干扰前x序列一样的序列X。
输出解扰后的序列X。
运行结果