Closed alexey-malov closed 9 years ago
unsigned char EncryptByte(unsigned char byte, unsigned char key)
{
byte ^= key;
unsigned char result = 0;
PutBit(result, 2, GetBit(byte, 0));
PutBit(result, 3, GetBit(byte, 1));
PutBit(result, 4, GetBit(byte, 2));
PutBit(result, 6, GetBit(byte, 3));
PutBit(result, 7, GetBit(byte, 4));
PutBit(result, 0, GetBit(byte, 5));
PutBit(result, 1, GetBit(byte, 6));
PutBit(result, 5, GetBit(byte, 7));
return result;
}
unsigned char DecryptByte(unsigned char byte, unsigned char key)
{
unsigned char result = 0;
PutBit(result, 5, GetBit(byte, 0));
PutBit(result, 6, GetBit(byte, 1));
PutBit(result, 0, GetBit(byte, 2));
PutBit(result, 1, GetBit(byte, 3));
PutBit(result, 2, GetBit(byte, 4));
PutBit(result, 7, GetBit(byte, 5));
PutBit(result, 3, GetBit(byte, 6));
PutBit(result, 4, GetBit(byte, 7));
result ^= key;
return result;
}
Вместо unsigned char следует использовать uint8_t, он гарантированно 8битный Можно сделать таблицы перемешивания битов и по ним выполнять шифровку и дешифровку при помощи одной функции.
FILE *pInFile;
FILE *pOutFile;
if ((OpenFile(pInFileName, "rb", MSG_ERR_CANT_OPEN_INPUT_FILE, pInFile))
&& (OpenFile(pOutFileName, "wb", MSG_ERR_CANT_OPEN_OUTPUT_FILE, pOutFile)))
{
if (task == ENCRYPT)
{
EncryptFile(pInFile, pOutFile, key);
}
else if (task == DECRYPT)
{
DecryptFile(pInFile, pOutFile, key);
}
}
else
{
return false;
}
Файлы не закрываются, если выходной не будет открыт
bool IsEmptyStr(char* str)
{
int i = 0;
while (str[i] != '\0')
{
if ((str[i] != ' ') && ((str[i] != '\t')))
{
return false;
}
i++;
}
return true;
}
IsEmptyStr - вводящее в заблуждение название
Есть std::function (в файле <functional>), с ее помощью можно создавать функции
typedef std::function<void(File* inputFile, File* outputFile, unsigned char key)> Task;
Task StrToProgramTask(const char* str)
{
if (/*decrypt*/)
{
return DecryptFile; // или return &Decrypt
}
else if (/*crypt*/)
{
return CryptFile;
}
return Task();
}
...
auto task = StrToTask(argv[1]);
if (!task)
{
// ошибка
}
else
{
task(inputFile, outputFile, key);
}
Проверена исправленная версия. 150 баллов
+= использовать некорректно.
Подумай, как лучше сделать