C++ 中字符串的 32 位 LFSR 加密

时间:2021-03-11 20:22:22

标签: c++ algorithm lfsr

我正在尝试实现一个 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;}

0 个答案:

没有答案
相关问题