Речь идет не о безопасности. Это также не должно усложнять работу. Я ищу простой алгоритм для изменения строки (url) таким образом, чтобы она не напоминала оригинал. Шифрование будет выполнено с помощью javascript. Затем я хочу передать зашифрованную строку функции PHP, чтобы вернуть ее в исходное. Оба конца могут делиться секретным ключом, или конверсии могут быть без ключа и полагаться только на логику.
Идеальное решение
Изменить: последнее требование было добавлено после ответа shamittomar .
Если это то, что вы хотите, вы можете кодировать и декодировать Base64 .
[EDIT]: после разъяснения ОП:
Поскольку вам не нужны широко используемые методы, здесь используется один редко используемый метод, который может сделать это для вас, предоставляя вывод только в LOWERCASE буквах и NUMBERS. Это Base32 Encode / Decode . Используйте следующие библиотеки:
Вы можете использовать побитовый XOR в javascript для кодирования строки и снова в PHP для ее декодирования снова. Я написал для вас пример Javascript. Он работает так же в PHP. Если вы вызовете enc () второй раз с уже закодированной строкой, вы снова получите исходную строку.
<html> <head><title></title></head> <body> <script type="text/javascript"> function enc(str) { var encoded = ""; for (i=0; i<str.length;i++) { var a = str.charCodeAt(i); var b = a ^ 123; // bitwise XOR with any number, eg 123 encoded = encoded+String.fromCharCode(b); } return encoded; } var str = "hello world"; var encoded = enc(str); alert(encoded); // shows encoded string alert(enc(encoded)); // shows the original string again </script> </body> </html>
В PHP делайте что-то вроде этого (осторожно, это не проверено, и прошло много времени с тех пор, как я сделал PHP):
$encoded = "..."; // <-- encoded string from the request $decoded = ""; for( $i = 0; $i < strlen($encoded); $i++ ) { $b = ord($encoded[$i]); $a = $b ^ 123; // <-- must be same number used to encode the character $decoded .= chr($a) } echo $decoded;
Если речь идет не о безопасности, а о том, чтобы сделать ее трудно сломать, то как насчет ROT-13
?
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/string/rot13 [rev. #1] String.prototype.rot13 = function(){ return this.replace(/[a-zA-Z]/g, function(c){ return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); }); }; ... var s = "My String"; var enc = s.rot13(); // encrypted value in enc
PHP имеет собственную функцию str_rot13
: http://php.net/manual/en/function.str-rot13.php
$decrypted = str_rot13($_GET['whatever']);
Как вы планируете реализовать (скрыть) секрет в Javascript? ИМХО это невозможно.
Изменить: ОК – не о безопасности .. тогда просто используйте любой механизм кодирования baseXX или rot. Но вы не можете сказать, что один из этих алгоритмов не будет хорошо известен …