Par*_*ars 0 javascript php encryption node.js
我想用 php 加密我的用户 ID,然后将它们发送到 javascript。并用 JavaScript 解密它们。
不同语言之间有没有通用的加密和解密方法?
我正在使用节点js。Nodejs 有服务器端 JavaScript。实际上它是服务器端解密。但它是JavaScript。
我在使用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);
Run Code Online (Sandbox Code Playgroud)
请注意,$ciphertext它将采用二进制形式,因此您需要将其编码为 Base 64,以便更容易在语言之间传输。
将加密的字符串传输到 Node JS 应用程序并将其从 base64 转换回二进制文件后,您应该能够使用 Javascript 的 Blowfish 实现对其进行解密。这是一个易于使用的示例:http://dren.ch/js_blowfish/
您可以安全地忽略该页面上的警告,因为它指的是大字符串的客户端解密(这很愚蠢)。如果您在服务器上执行此操作,则可以安全地保密您的密钥。
请注意,在上面的示例中,字符串在加密之前已进行 Base64 编码,因此解密后必须再次对其进行 Base64 解码。
还要警惕 Blowfish ECB 的最小和最大密钥大小,以避免一些麻烦。您可以使用 PHP mcrypt_enc_get_supported_key_sizes函数进行检查。
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |