#c# #php
#c# #php
Вопрос:
У меня есть код, использующий C #, и я хочу попробовать перевести на php-код, но всегда получал другой результат в версии php
C#
private static string encryptDecrypt(string input)
{
char[] key = { 'X' }; //Any chars will work, in an array of any size
char[] output = new char[input.Length];
for (int i = 0; i < input.Length; i )
{
output[i] = (char)(input[i] ^ key[i % key.Length]);
}
return new string(output);
}
string vb64 = "DAAdAAAADAAVAAsAHwA=";
string decrypted = encryptDecrypt(Encoding.Unicode.GetString(Convert.FromBase64String(vb64)));
Console.WriteLine("Decrypted:" decrypted);
расшифрованный вывод: TEXTMSG
PHP
function encryptDecrypt($input) {
$key = ['X'];
$output = '';
for ($i = 0; $i < strlen($input); $i ) {
$output .= $input[$i] ^ $key[$i % count($key)];
}
return $output;
}
$vb64 = "DAAdAAAADAAVAAsAHwA=";
$decrypted = encryptDecrypt(base64_decode($vb64));
echo "decrypted ".$decrypted.PHP_EOL;
расшифрованный TXEXXXTXMXSXGX
РЕДАКТИРОВАТЬ: необходимо добавить mb_convert_encoding для установки значения UTF-16 encryptDecrypt(mb_convert_encoding(base64_decode($ vb64), «», «UTF-16LE»))
Комментарии:
1. Просто чтобы вы знали,
Encoding.Unicode
!=Encoding.UTF8
2. Вы уверены, что
count($key)
это правильно? Я думаю, вы хотели использоватьstrlen($key)
[Строку 5].3. Эти два кода отличаются. То, что вы делаете в цикле для PHP, не совпадает с исходным кодом C #.
4. я скопировал код из github.com/KyleBanks/XOREncryption
5. @user Я рекомендую опубликовать ваш собственный ответ на ваш вопрос, поскольку я неправильно понял, какой язык был, так сказать, «проблемой», и я не могу предоставить ответ на PHP.
![]()