Я очень заинтересован в криптографии, и так как я тоже люблю программирование, я решил создать небольшую программу для шифрования файлов с использованием алгоритма шифрования XTEA.Меня вдохновили Википедия , и поэтому я написал эту функцию для шифрования (для экономии места я не буду публиковать функцию расшифровки, поскольку она почти такая же):
void encipher(long *v, long *k)
{
long v0 = v[0], v1 = v[1];
long sum = 0;
long delta = 0x9e3779b9;
short rounds = 32;
for(uint32 i = 0; i<rounds; i++)
{
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
}
v[0] = v1;
v[1] = v1;
}
Теперь, когда я хочу его использовать, я написал такой код:
long data[2]; // v0 and v1, 64bits
data[0] = 1;
data[1] = 1;
long key[4]; // 4 * 4 bytes = 16bytes = 128bits
*key = 123; // sets the key
cout << "READ: \t\t" << data[0] << endl << "\t\t" << data[1] << endl;
encipher(data, key);
cout << "ENCIPHERED: \t" << data[0] << endl << "\t\t" << data[1] << endl;
decipher(data, key);
cout << "DECIPHERED: \t" << data[0] << endl << "\t\t" << data[1] << endl;
Я всегда получаю либо сбой во время выполнения, либо неверный расшифровочный текст:
Я понимаюосновы программы, но я действительно не знаю, что не так с моим кодом.Почему зашифрованные данные [0] и данные 1 совпадают?И почему расшифрованные данные полностью отличаются от исходных данных?Я использую типы неправильно?Я надеюсь, что вы можете помочь мне решить мою проблему :).