0

我想用 php 加密我的用户 ID,将它们发送到 javascript。并用javascript解密它们。
有没有在不同语言之间加密和解密的通用方法?

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

4

2 回答 2

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 应用程序并将其从 base64 转换回二进制文件后,您应该能够使用 Javascript 的 blowfish 实现对其进行解密。这是一个易于使用的示例:http: //dren.ch/js_blowfish/

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

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

还要注意 Blowfish ECB 的最小和最大密钥大小,以免让人头疼。您可以使用 PHP mcrypt_enc_get_supported_key_sizes函数检查这一点。

于 2013-10-31T15:48:29.743 回答
2

互联网。tcp。http

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

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

于 2013-10-31T15:42:59.567 回答