简单的Javascript加密,PHP用共享密钥解密

时间:2010-08-31 12:28:52

标签: php javascript algorithm encryption

这与安全无关。它也不会让它难以打破。我正在寻找一种简单的算法来改变一个字符串(一个url),它的方式与原来的不一样。 加密将使用javascript完成。然后我想将加密的字符串提供给PHP函数以将其更改回原始字符串。两端都可以共享一个密钥,或者转换可以是无密钥的,只依赖于逻辑。

理想的解决方案

  1. 会很简单
  2. 将使用可用的javascript函数进行加密
  3. 将使用可用的php函数进行解密
  4. 将生成加密字符串,使其不像普通文本那样
  5. 仅在加密字符串中使用小写字母和数字
  6. 不是广泛使用的方法,如Base64-ing作为加密。
  7. 编辑:在shamittomar回答后添加了最后一项要求。

5 个答案:

答案 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_rot13http://php.net/manual/en/function.str-rot13.php

$decrypted = str_rot13($_GET['whatever']);

答案 3 :(得分:1)

您打算如何在Javascript中实现(隐藏)秘密?恕我直言,这是不可能的。

编辑:好的 - 不是关于安全性..然后只使用任何baseXX或rot编码机制。但你真的不能说这些算法中的一个不会众所周知......

答案 4 :(得分:0)

好吧,我找到了此页面,并发现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;
}