Подтвердить что ты не робот

Простое шифрование Javascript, расшифровка PHP с помощью общего секретного ключа

Это не о безопасности. Это также не должно усложнять работу. Я ищу простой алгоритм для изменения строки (url) таким образом, чтобы она не напоминала оригинал. Шифрование будет выполнено с помощью javascript. Затем я хочу передать зашифрованную строку функции PHP, чтобы вернуть ее в исходное. Оба конца могут делиться секретным ключом, или преобразования могут быть без ключа и полагаться только на логику.

Идеальное решение

  • будет прост
  • будет использовать доступные функции javascript для шифрования
  • будет использовать доступные функции php для дешифрования
  • создаст зашифрованную строку, чтобы она не напоминала простой текст
  • использует только строчные буквы и цифры в зашифрованной строке
  • - не метод, широко используемый как Base64-ing как шифрование.

Изменить: последнее требование было добавлено после ответа shamittomar.

4b9b3361

Ответ 1

Если это то, что вы хотите, вы можете Base64 кодировать и декодировать это.

[РЕДАКТИРОВАТЬ]: После разъяснения ОП:

Поскольку вам не нужны широко используемые методы, вот один из редко используемых методов, и он может сделать это за вас, предоставляя вывод только буквами LOWERCASE и NUMBERS. Это Base32 Encode/Decode. Используйте следующие библиотеки:

Ответ 2

Вы можете использовать побитовое 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;

Ответ 3

Если это не о безопасности, а не о том, чтобы сделать ее трудно сломать, то как насчет 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']);

Ответ 4

Как вы планируете реализовать (скрыть) секрет в Javascript? ИМХО это невозможно.

Изменить: ОК - не о безопасности.. тогда просто используйте любой механизм кодирования baseXX или rot. Но вы не можете сказать, что один из этих алгоритмов не будет хорошо известен...

Ответ 5

Ну, я нашел эту страницу и обнаружил, что программа Redcully не работает для меня, поэтому я подумал, что это происходит со всеми остальными. наконец я нашел причину и исправил ее. Здесь новый код... Спасибо Redcully :)

Функция 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;
}

Ответ 6

Расшифровка Не работает с двумя буквами o в строке, одна буква o отбрасывается.