主要原理
通过以上五位移位寄存器产生扰乱序列,与原始输入序列异或相加,最后再通过与扰乱序列异或相加恢复成原始序列。
头文件
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
main()函数
int main()
{
int x1[62] = { 0 };//第一个输入序列:全零序列62位
int x2[62]; //第二个输入序列:随机序列62位
for (int i = 0; i < 62; i++)
x2[i] = rand() % 2;
printf("62位全零序列:\n");
for (int i = 0; i<62; i++)
printf("%d", x1[i]);
operate(x1);
printf("\n62位随机序列:\n");
for (int i = 0; i<62; i++)
printf("%d", x2[i]);
operate(x2);
return 0;
}
定义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;
else
D_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;
else
y1[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;
else
X[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。