2010-08-31 86 views
12

这不是安全问题。这也不是让它难以打破。我正在寻找一种简单的算法来改变一个字符串(一个网址)的方式,它不像原文。 加密将使用JavaScript完成。然后我想喂加密的字符串到PHP函数将其更改回原始。两端可以共享一个秘密密钥,或者转换可以是无钥匙的,只依赖逻辑。简单的Javascript加密,使用共享密钥进行PHP解密

理想的解决方案

  1. 将简单
  2. 将使用可用的JavaScript函数进行加密
  3. 将使用可用的PHP函数用于解密
  4. 将产生加密的字符串中的方式不是像普通文字根本
  5. 将只使用加密字符串中的小写字母字符和数字
  6. 不是广泛使用的方法,如Base64-ing作为加密。

编辑:最后一项要求是在shamittomar的答案后面加上的。

+0

通过在JavaScript这样客户可以很容易地查看源并解密您的加密字符串。 – Chris 2010-08-31 12:30:40

+0

@Chris - 这不会造成问题;正如我在问题中所说的那样,这不是出于安全或保密的原因。 – 2010-08-31 12:36:16

+0

这就是为什么我仅将它作为评论发布,以确保您知道这一切。正如其他人所说的任何哈希算法您的JavaScript和PHP可用将工作得很好。 md5,base64,sha都会工作。 – Chris 2010-08-31 12:37:02

回答

11

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

[编辑]:OP澄清后:

当你不希望广泛使用的方法,这里是一个很少使用方法,并可以通过只使用小写字母给输出为你做它和数字。它是Base32 Encode/Decode。使用以下库:

+0

谢谢。我可能应该在我的问题中说明广泛使用的转换方法是不适合的。我会编辑我的问题来澄清这一点。 – 2010-08-31 12:38:57

+0

@Majid,回答已更新。 – shamittomar 2010-08-31 12:43:10

+0

谢谢!我可能会链接不止一种方法来获得它的独特性。 – 2010-08-31 12:52:03

1

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

编辑:确定 - 不是关于安全性,那么只需使用任何baseXX或腐蚀编码机制。但你真的不能说这些algorythms之一不会是众所周知的...

+0

客观不是隐藏秘密 – 2010-08-31 12:33:25

+0

@Majid如果密钥不是秘密,那么加密的用法是什么? – Max 2010-08-31 12:34:27

+0

我认为他的意思是哈希不加密。 – Chris 2010-08-31 12:37:20

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']); 
+1

但OP希望使用'URL'作为输入。而'Rot-13'则保留*非字母字符*。这可能会输出'/'和':'字符,但是OP只需要输出*小写和数字*。另外,由于非alpha字符是未触及的,所以预测编码字符串是一个URL非常简单。 – shamittomar 2010-08-31 12:48:35

+0

+1谢谢。将成为一个链条中的好腿。 – 2010-08-31 12:53:04

+0

@shamittomar,当这个答案被提出时,没有关于URL的评论作为输入。根据要求,我基本回答了问题。 – Fosco 2010-08-31 13:48:46

23

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

+1谢谢你Ridcully,我很欣赏你付出​​的努力和时间。 – 2010-08-31 12:56:43

+0

+1谢谢................. – 2011-11-24 04:10:24

+0

PHP方面如何工作?新的这个..但与它混淆说:“它在PHP中工作是一样的”。当我查找XOR时,它也有一个键 – Jason 2012-08-02 12:09:54