📄 scrambler.cpp
字号:
// 功能:按既定移位寄存器结构完成加解扰运算. 本例中抽头为[1,2,4,5,7,8,10,11,12,16,22,23,26,32]
//输入参数:32位初态Initi,输入数据指针dat_in,输出数据指针dat_out, 码元数count
void DeCodScram ( __int32 Initi, unsigned char *dat_in,unsigned char *dat_out, int count) //
{
int i, ibit = 0, ibyte = 0, BytN=count/8+(count%8>0);
unsigned char *Sreg=new unsigned char[33+count], data = 0;
unsigned char *ScramCod=new unsigned char[BytN];
for (i=31; i>=0; i--,Initi <<=1)
{ if (Initi & 0x80000000)
Sreg[i] = 1;
else
Sreg[i] = 0;
}
for (i=32; i<32+count; i++)
{ Sreg[i] = Sreg[i-1]^Sreg[i-2]^Sreg[i-4]^Sreg[i-5]^Sreg[i-7]^Sreg[i-8]^Sreg[i-10]^Sreg[i-11]^Sreg[i-12]^Sreg[i-16]^Sreg[i-22]^Sreg[i-23]^Sreg[i-26]^Sreg[i-32];
data = ((data<<1)&0xfe)|Sreg[i];
ibit++;
if (ibit>=8)
{
ibit=0;
ScramCod[ibyte++] = data;
}
}
if ( ibit<8 )
{ ScramCod[ibyte]=data<<(8-ibit);}
for (i=0; i<BytN; i++)
{ dat_out[i]=dat_in[i]^ScramCod[i];} //解扰: 存入RmCod时就自右至左 因为数值上是高字节在右,低字节在左
}
int _tmain(int argc, _TCHAR* argv[]) // 实验程序
{
int i, i1;
unsigned char ScramCod[63];
__int32 Initi=0x89a27c31; //32位移位寄存器初态
int datcount=4; //需要解扰数据有4个字节
unsigned char data[4]={0x7B,0xC7,0x5A,0x28};
DeCodScram(Initi,data,RmCod,30); //完成30bit解扰码(左对齐—尾部2b无效)
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -