这与安全无关。它也不会让它难以打破。我正在寻找一种简单的算法来改变一个字符串(一个url),它的方式与原来的不一样。 加密将使用javascript完成。然后我想将加密的字符串提供给PHP函数以将其更改回原始字符串。两端都可以共享一个密钥,或者转换可以是无密钥的,只依赖于逻辑。
理想的解决方案
编辑:在shamittomar回答后添加了最后一项要求。
答案 0 :(得分:25)
您可以在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;
答案 1 :(得分:11)
如果这是您想要的,您可以 Base64 对其进行编码和解码。
[编辑]:OP澄清后:
由于您不希望广泛使用的方法,这里有一个很少使用的方法,并且可以通过仅以LOWERCASE字母和NUMBERS提供输出来为您完成。它是 Base32 Encode/Decode 。使用以下库:
答案 2 :(得分:5)
如果它不是关于安全性,而不是关于难以打破,那么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']);
答案 3 :(得分:1)
您打算如何在Javascript中实现(隐藏)秘密?恕我直言,这是不可能的。
编辑:好的 - 不是关于安全性..然后只使用任何baseXX或rot编码机制。但你真的不能说这些算法中的一个不会众所周知......
答案 4 :(得分:0)
好吧,我找到了此页面,并发现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;
}