これはセキュリティに関するものではありません。壊れにくくすることでもありません。文字列(URL)を元の文字列に似ていない方法で変更する簡単なアルゴリズムを探しています。 暗号化はjavascriptで行われます。次に、encrypted文字列をPHP関数にフィードして、元の文字列に戻します。両端が可能です。秘密鍵を共有するか、変換が鍵なしで論理のみに依存する可能性があります。
理想的なソリューション
編集:最後の要件は shamittomar の回答の後に追加されました。
それが必要な場合は、Base64でエンコードおよびデコードできます。
[編集]:OPの説明後:
広く使用されているメソッドは必要ないため、ここではまれに使用されるメソッドを1つ示します。これは、小文字と数字のみで出力することで実行できます。 Base32エンコード/デコードです。次のライブラリを使用します。
Javascriptでビット単位のXORを使用して文字列をエンコードし、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でシークレットをどのように実装(非表示)する予定ですか?私見それは不可能です。
編集:OK-セキュリティについてではありません。次に、baseXXまたはrotエンコーディングメカニズムを使用してください。しかし、これらのアルゴリズムの1つがよく知られていないとは本当に言えません...
さて、私はこのページを見つけて、Redcullyのプログラムが私のために機能しないのを見つけたので、それは他のすべてで起こると思いました。ついに理由がわかり、修正しました。ここに新しいコードがあります... Redcullyに感謝します:)
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;
}
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;
}