PHP和Javascript之间是否有通用的加密方法?

时间:2013-10-31 15:37:30

标签: javascript php node.js encryption

我想用php加密我的用户ID,将它们发送到javascript。并在javascript中解密它们 是否有任何通用的方法来加密和解密不同的语言?

我正在使用节点js。 nodejs有服务器端javascript。实际上它是服务器端解密。但它是javascript。

2 个答案:

答案 0 :(得分:4)

在使用PHP和Coldfusion之前,我已经完成了跨语言加密。有一些技巧,因为它们的实现略有不同,但它在Javascript中应该更容易,因为Javascript没有本机加密功能。您必须提供自己的,所以您可以提供您所需要的。

要在PHP中加密,您需要安装mcrypt个库。我选择Blowfish作为我的算法,并使用ECB模式,因为它更容易使用 - 您不需要担心初始化向量,但理论上它不太安全。但是,鉴于您只加密短用户ID,这应该足够了。

以下是使用mcrypt加密字符串的示例:

$data = $user_id;
$data = base64_encode($data);
// Add PKCS5 padding to data string for compatibility
// This may not be necessary, depending on your Javascript implementation
$pad = 8 - (strlen($data) % 8);  
$data = $data . str_repeat(chr($pad), $pad);
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_ECB;
$key = "SECRET";
$ciphertext = mcrypt_encrypt($algorithm, $key, $data, $mode, null);
$base64 = base64_encode($ciphertext);

请注意,$ciphertext将采用二进制格式,因此您需要在base 64中对其进行编码,以便在语言之间进行转换。

将加密的字符串传输到Node JS应用程序和convert it back into binary from base64之后,您应该能够使用针对Javascript的blowfish实现对其进行解密。以下是一个易于使用的示例:http://dren.ch/js_blowfish/

您可以放心地忽略该页面上的警告,因为它指的是大字符串的客户端解密(这很愚蠢)。如果您在服务器上执行此操作,则可以安全地保密密钥。

请注意,在上面的示例中,字符串在加密之前是base64编码的,因此您必须在解密后再对其进行base64解码。

还要注意Blowfish ECB的最小和最大按键尺寸,以避免一些头痛。您可以使用PHP mcrypt_enc_get_supported_key_sizes函数进行检查。

答案 1 :(得分:1)

  

互联网。 TCP。 http

是的,常见的方法是SSL。如果您希望通过HTTP在服务器和客户端之间建立安全性,那么SSL就是您正在寻找的解决方案。

是的,您可以推出自己的解决方案。不,这不会有任何好处。正确地实施加密是非常困难的,非常困难,如果你必须在Stack Overflow上询问有关它的问题,你有没有机会做正确的事。使用SSL,或者什么都不使用,因为你提出的任何其他选项都不会比纯文本更好。