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


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

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

  1. будет будьте просты
  2. будет использовать доступные функции javascript для шифрования
  3. будет использовать доступные функции php для расшифровки
  4. создаст зашифрованную строку таким образом, чтобы она совсем не напоминала обычный текст
  5. будет использовать только строчные буквы алфавита и цифры в зашифрованной строке
  6. не является методом, широко используемым, как Base64, в качестве шифрования.

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

Author: Community, 2010-08-31

5 answers

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

[ РЕДАКТИРОВАТЬ]: После уточнения ОП:

Поскольку вам не нужны широко используемые методы, вот один редко используемый метод, который может сделать это за вас, выдавая выходные данные только СТРОЧНЫМИ буквами и ЦИФРАМИ. Это так Кодирование/декодирование Base32. Используйте следующие библиотеки:

 11
Author: shamittomar, 2010-08-31 12:41:52

Вы можете использовать побитовое 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;
 24
Author: Ridcully, 2015-05-26 12:04:10

Если речь идет не о безопасности и не о том, чтобы ее было трудно взломать, то как насчет 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']);
 5
Author: Fosco, 2010-08-31 12:38:06

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

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

 1
Author: Jan., 2010-08-31 12:49:03

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

Функция 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;
}
 0
Author: Manav Akela, 2018-06-26 16:47:09