Я хочу транслировать XOR шифрование с ++ на php. Я использую эту функцию для шифрования. Я хочу расшифровать этот файл с помощью php.
wchar_t* encryptDecrypt(const wchar_t* toEncrypt, int length, wchar_t* EBKey) {
const wchar_t* key = EBKey;
wchar_t* output = new wchar_t[length];
for (int i = 0; i < length; i++) {
output[i] = toEncrypt[i] ^ key[i % wcslen(key)];
}
return output;
}
Я читаю двоичный файл xls и шифрую с encryptDecrypt
void encryptAndSave(char *src,AnsiString key) {
wchar_t *content;
wchar_t buffer[255];
wchar_t *result;
long size;
long fsize;
FILE *f=NULL;
f=fopen(src,"rb+");
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f,0, SEEK_SET);
content = (wchar_t *) malloc(size * sizeof (wchar_t));
fread(content, size, 1, f);
fclose(f);
content=encryptDecrypt(content,size,strToWchar_t(key));
f=fopen(src,"wb+");
fwrite(content, size, 1, f);
fclose(f);
}
Я использую эту функцию для преобразования ключа в wchar_t
wchar_t* strToWchar_t(AnsiString value) {
int iSize = value.WideCharBufSize();
wchar_t *tmp = new wchar_t[iSize];
value.WideChar(tmp,iSize);
return tmp;
}
Этот код в php для расшифровки
function encryptDecrypt($toEncrypt,$key) {
$output=array();
for ( $i = 0; $i < strlen($toEncrypt); $i++ ) {
$output[$i]= $toEncrypt[$i] ^ $key{$i % strlen($key)};
}
return $output;
}
Но это не правильно дешифрование. Когда я шифрую и дешифрую это слово на c ++, результат должен быть от «qwerty» до «ﻎ CDT @ GH», но в php он не работает как c ++. Когда я расшифровываю «ﻎ CDT @ GH» в php, я получаю «яМp1v3e2s1u3y2», но я должен получить «qwerty». Пожалуйста, помогите решить эту проблему.
Задача ещё не решена.
Других решений пока нет …