Intereting Posts
Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом jquery-php magic: как открыть почтовую страницу изнутри петли на главной странице fancybox Вызвать программу C из php и прочитать вывод программы php update table по форме У PHP есть оценка короткого замыкания? Добавьте один дополнительный разрыв строки в тексте в php Вставка массива PHP в две таблицы MySQL PHP MYSQL: способ отображения таблицы в порядке возрастания Автозагрузки Google не работает на моей php-странице Используйте одну таблицу миграции Laravel для каждой базы данных Разница между операторами «не равных» <> и! = В PHP Использование переменной PHP $ _SESSION для хранения больших символов данных логин на сайте без пароля и имени пользователя использовать пользовательскую форму активный домен каталога сообщение в tumblr с помощью php Определите, сколько времени требуется для загрузки файла (PHP)

XOR-шифр в Java и PHP: разные результаты

Предположим, у меня есть простой текст – хорошая чашка молочного чая , который будет зашифрован XOR с ключом 12345 .

Этот код Java:

import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; public class XORTest { public static void main(String args[]){ String plaintext = "a nice cup of milk tea"; String key = "12345"; String encrypted = xor_encrypt(plaintext, key); String decrypted = xor_decrypt(encrypted, key); System.out.println("Encrypted: "+encrypted); System.out.println("Decrypted: "+decrypted); } public static String xor_encrypt(String message, String key){ try { if (message==null || key==null ) return null; char[] keys=key.toCharArray(); char[] mesg=message.toCharArray(); BASE64Encoder encoder = new BASE64Encoder(); int ml=mesg.length; int kl=keys.length; char[] newmsg=new char[ml]; for (int i=0; i<ml; i++){ newmsg[i]=(char)(mesg[i]^keys[i%kl]); } mesg=null; keys=null; String temp = new String(newmsg); return new String(new BASE64Encoder().encodeBuffer(temp.getBytes())); } catch ( Exception e ) { return null; } } public static String xor_decrypt(String message, String key){ try { if (message==null || key==null ) return null; BASE64Decoder decoder = new BASE64Decoder(); char[] keys=key.toCharArray(); message = new String(decoder.decodeBuffer(message)); char[] mesg=message.toCharArray(); int ml=mesg.length; int kl=keys.length; char[] newmsg=new char[ml]; for (int i=0; i<ml; i++){ newmsg[i]=(char)(mesg[i]^keys[i%kl]); } mesg=null; keys=null; return new String(newmsg); } catch ( Exception e ) { return null; } }} 

дает мне:

Шифрование: UBJdXVZUElBBRRFdVRRYWF5YFEFUUw ==

Расшифровка: хорошая чашка молочного чая

И этот код PHP:

 <?php $input = "a nice cup of milk tea"; $key = "12345"; $encrypted = XOR_encrypt($input, $key); $decrypted = XOR_decrypt($encrypted, $key); echo "Encrypted: " . $encrypted . "<br>"; echo "Decrypted: " . $decrypted . "<br>"; function XOR_encrypt($message, $key){ $ml = strlen($message); $kl = strlen($key); $newmsg = ""; for ($i = 0; $i < $ml; $i++){ $newmsg = $newmsg . ($msg[$i] ^ $key[$i % $kl]); } return base64_encode($newmsg); } function XOR_decrypt($encrypted_message, $key){ $msg = base64_decode($encrypted_message); $ml = strlen($msg); $kl = strlen($key); $newmsg = ""; for ($i = 0; $i < $ml; $i++){ $newmsg = $newmsg . ($msg[$i] ^ $key[$i % $kl]); } return $newmsg; } ?> 

дает мне:

Зашифровано: MTIzNDUxMjM0NTEyMzQ1MTIzNDUxMg ==

Decrypted:

Интересно, почему оба результата разные. Я должен признать, что PHP не является моей чашкой чая.

BTW, я использую это для игрушечного проекта, поэтому высокая безопасность не нужна.

Solutions Collecting From Web of "XOR-шифр в Java и PHP: разные результаты"