Node.JS和PHP AES-128-EBC数据加密

时间:2012-08-10 16:06:36

标签: php javascript node.js encryption

我正在尝试在javascript(node.js)中生成加密的数据块,然后通过HTTP传递到另一个系统。我已经在php中获得了一个参考系统来比较我的结果。

由于看似超出我的掌握的原因,我无法获得我的javascript版本来生成与PHP版本相同的加密数据。我已经检查过我使用的按键是一样的。有没有人有任何关于我做错的线索或提示。

(是的,我知道欧洲央行很糟糕,但这不是我的选择)

参考PHP实现

<?php

function getEncrypt($str, $key)
{
    $realKey = substr($key, 0, 16);
    $padding = pkcs5_pad($str, 16);
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $realKey, $padding, MCRYPT_MODE_ECB));
}

function pkcs5_pad ($text, $blocksize)
{
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr($pad), $pad);
}


$key = "oi3sgkosQPIdFa0eVSjecIhkha2nAfpn3anAozln0e9rkIGPvzUBgToCtlXLsKyjBITGKozHmn1NArgQodawidiVnyxccsf8ZnUgof4kq0iBCS7wrG1raytauMusRjjb";
$string = '{"pol.start":"11-06-2012 09:00:00","pol.end.after":43200,"lic.cache":"yes","playback":2880,"out.digital":"use","out.analog":"use"}';

$encData = getEncrypt($string, $key);

var_dump($encData);

我的Javascript尝试:

var crypto = require('crypto');
var cipherAlgo = 'AES-128-ECB';

var policy = '{"pol.start":"11-06-2012 09:00:00","pol.end.after":43200,"lic.cache":"yes","playback":2880,"out.digital":"use","out.analog":"use"}';
var sharedSecret = 'oi3sgkosQPIdFa0eVSjecIhkha2nAfpn3anAozln0e9rkIGPvzUBgToCtlXLsKyjBITGKozHmn1NArgQodawidiVnyxccsf8ZnUgof4kq0iBCS7wrG1raytauMusRjjb';


var util = require('util');


function encrypt(string, key)
{
    var realKey = key.substring(0,16);
    var cipher = crypto.createCipher(cipherAlgo, key.substring(0,16));
    //encrypt our string
    var encrypted = cipher.update(string, 'utf8', 'base64');
    encrypted += cipher.final('base64');
    return encrypted;
}


console.log(encrypt(policy, sharedSecret));

我尝试过很多东西,例如将输出重新调整为二进制,放入缓冲区和base64ing等等。 为了爱我的理智,有人可以为此提供帮助。

0 个答案:

没有答案