Использование Blowfish над различными Endianness

Я пишу FTP-программу, которая требует шифрования Blowfish между компьютером с прямым порядком байтов и компьютером с прямым порядком байтов. Вот код, который я использую для шифрования. Как видите, он учитывает Endianness уже в коде. Проблема в том, что когда я шифрую на одной машине, а затем дешифрую на машине с другим порядком байтов, результат получается неправильным.

В настоящее время я просто записываю зашифрованную строку в файл, а затем читаю ее на другом компьютере (совместно используемой памяти) для простого теста.

Вот два вспомогательных метода, которые я создал (довольно просто):

      //Encrypts string and return encrpted string
void encrypt(Blowfish* BF, unsigned char* whatToEncrypt, int size, unsigned char* encryptionKey){

char* tmp = (char*)malloc(sizeof(char)*(PASSWORD_LENGTH+1));
memcpy(tmp, encryptionKey, (PASSWORD_LENGTH+1));

//Set BF Password
BF->Set_Passwd((char*)tmp);

BF->Encrypt((void *)whatToEncrypt, size);

}

//decrypts enrypted string and returns a string
void decrypt(Blowfish* BF, unsigned char* whatToDecrypt, int size, unsigned char* encryptionKey){

char* tmp = (char*)malloc(sizeof(char)*(PASSWORD_LENGTH+1));
memcpy(tmp, encryptionKey, (PASSWORD_LENGTH+1));

//Set BF Password
BF->Set_Passwd(tmp);

//decrypt
BF->Decrypt((void *)whatToDecrypt, size);
}

Код машины 1:

int main(){
Blowfish BF;

unsigned char* test = new unsigned char[8];
for (int i = 0; i < 8; i++){
test[i] = 'a'+i;
}

unsigned char* test_key = new unsigned char[9];
for (int i = 0; i < 8; i++){
test_key[i] = 'f';
}
test_key[8] = '\0';

cout << "test: " << test<<endl;
encrypt(&BF, test, 8, test_key);
cout << "test: " << test<<endl;

FILE* in = fopen("example.txt", "w");
for (int i = 0; i < 8; i++){
fputc(test[i], in);
}
fclose(in);

}

Код машины 2:

int main(){

FILE* in = fopen("example.txt", "r");
Blowfish BF;

unsigned char* test = new unsigned char[9];
for (int i = 0; i < 8; i++){
test[i] = fgetc(in);
}
test[8] = '\0';

fclose(in);

unsigned char* test_key = new unsigned char[9];
for (int i = 0; i < 8; i++){
test_key[i] = 'f';
}
test_key[8] = '\0';

cout << "test: " << test<<endl;
decrypt(&BF,test, 8, test_key);
cout << "test: " << test<<endl;
}

Как видите, ключ жестко запрограммирован, поэтому он такой же, но результат все равно неправильный. Я попытался вручную назначить WordByte в каждой комбинации (в blowfish.h) между двумя машинами, но безуспешно.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector