我正在尝试实现一个 LFSR 来加密一个字符串,但问题是只有在 LFSR 的第 8 步是收集最低字节的时候。
我当前的代码加密正确(我相信),但不是我想要的格式。
我必须使用提供的初始值和提供的反馈值。
任何帮助将不胜感激。
我的代码:
unsigned char *Crypt(unsigned char *data, int dataLength, unsigned int initialValue){
unsigned int a = 0x87654321; //Feedback Value
unsigned int b = initialValue;
int leastSigBit, count;
for (int i = 0; i < dataLength; i++)
{
count = 0;
data[i] = (data[i]) ^ ((b & 0x0000000F)); //Extracting the lowest byte
do
{
count++;
leastSigBit = b & 1; //Make leastSigBit the output bit
b >>= 1; //Shift Register
if (leastSigBit)
b ^= a; //If leastSigBit is 1, then XOR feedback product of the 32-bit shift register
} while (count % 8 != 0); //On the 8th step it will stop loop and extract lowest byte
}
return data;}
int main(){
unsigned int initialVal = 0x12345678;
unsigned char *data;
int dataLength = 5;
int i;
data[0] = 'a';
data[1] = 'p';
data[2] = 'p';
data[3] = 'l';
data[4] = 'e';
cout << endl;
cout << "Original Message: "; //Print Original Data
cout << data << endl;
cout << "Encrypted Message: ";
Crypt(data, dataLength, initialVal);
for (int i = 0; i < dataLength; i++)
cout << "\\x" << hex << (int)data[i]; //Print Encrypted Data
cout << endl;
cout << "Recovered Message: ";
Crypt(data, dataLength, initialVal);
cout << data << endl; //Printing Recovered Message
cout << endl;
return 0;}