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

2022-08-30 22:42:44

这与安全性无关。它也不是要让它难以打破。我正在寻找一种简单的算法来更改字符串(url),使其与原始字符串不同。加密将使用javascript完成。然后我想将加密的字符串馈送到PHP函数,以将其更改回原始状态。两端可以共享一个密钥,或者转换可以是无密钥的,并且仅依赖于逻辑。

理想的解决方案

  1. 会很简单
  2. 将使用可用的javascript函数进行加密
  3. 将使用可用的 php 函数进行解密
  4. 将生成加密字符串的方式根本不像纯文本
  5. 将仅在加密字符串中使用小写字母字符和数字
  6. 不是像Base64-ing那样广泛使用的方法作为加密。

编辑:最后一个要求是在shamittomar的答案之后添加的。


答案 1

您可以在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;

答案 2

如果这是你想要的,你可以Base64编码和解码它。

[编辑]:在OP澄清之后:

由于您不希望广泛使用的方法,因此这里有一种很少使用的方法,可以通过仅以小写字母和数字提供输出来为您做到这一点。它是Base32编码/解码。使用以下库: