Простое шифрование Javascript, расшифровка PHP с общим секретным ключом - PullRequest
13 голосов
/ 31 августа 2010

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

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

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

Редактировать: последнее требование было добавлено после ответа shamittomar .

Ответы [ 5 ]

25 голосов
/ 31 августа 2010

Вы можете использовать побитовый 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;
11 голосов
/ 31 августа 2010

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

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

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

6 голосов
/ 31 августа 2010

Если речь идет не о безопасности и не о том, что ее сложно взломать, то как насчет 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']);
1 голос
/ 31 августа 2010

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

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

0 голосов
/ 26 июня 2018

Ну, я нашел эту страницу и обнаружил, что программа 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...