Простое шифрование Javascript, дешифрование PHP с помощью общего секретного ключа
Речь идет не о безопасности. Это также не для того, чтобы его было трудно сломать. Я ищу простой алгоритм для изменения строки (URL-адреса) таким образом, чтобы она не напоминала оригинал. Шифрование будет выполнено с помощью javascript. Затем я хочу передать зашифрованную строку в функцию PHP, чтобы вернуть ее в исходное состояние. Оба конца могут иметь общий секретный ключ, или преобразования могут быть без ключа и основываться только на логике.
Идеальное решение
- будет будьте просты
- будет использовать доступные функции javascript для шифрования
- будет использовать доступные функции php для расшифровки
- создаст зашифрованную строку таким образом, чтобы она совсем не напоминала обычный текст
- будет использовать только строчные буквы алфавита и цифры в зашифрованной строке
- не является методом, широко используемым, как Base64, в качестве шифрования.
Изменить: Последнее требование было добавлено после ответа шамиттомара.
5 answers
Если это то, что вы хотите, вы можете Base64 кодировать и декодировать это.
[ РЕДАКТИРОВАТЬ]: После уточнения ОП:
Поскольку вам не нужны широко используемые методы, вот один редко используемый метод, который может сделать это за вас, выдавая выходные данные только СТРОЧНЫМИ буквами и ЦИФРАМИ. Это так Кодирование/декодирование Base32. Используйте следующие библиотеки:
- Кодировщик Javascript Base32: http://www.tumuski.com/2010/04/nibbler /
- Декодер PHP Base32: http://php-classes.de/class/base32 /
Вы можете использовать побитовое 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, e.g. 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. Но на самом деле вы не можете сказать, что один из этих алгоритмов не был бы хорошо известен...
Ну, я нашел эту страницу и обнаружил, что программа Редкулли не работает для меня, поэтому я подумал, что это происходит со всеми остальными. наконец я нашел причину и исправил это. Вот новый код... Спасибо Редкулли:)
Функция JS:
function encode(str) {
var encoded = "";
for (i=0; i<str.length;i++) {
var a = str.charCodeAt(i);
var b = a ^ 51; // bitwise XOR with any number, e.g. 123
encoded = encoded+String.fromCharCode(b);
}
return encoded;
}
Функция PHP:
function decode($encoded) {
$decoded = "";
for( $i = 0; $i < strlen($encoded); $i++ ) {
$b = ord($encoded[$i]);
$a = $b ^ 51; // <-- must be same number used to encode the character
$decoded .= chr($a);
}
return $decoded;
}