密钥128位,返回16位数组

时间:2014-01-06 10:33:06

标签: php arrays node.js

我详细介绍了该项目: 我正在为mega.co.nz使用PHP SDK,但由于加密问题(prepare_key太慢,偶尔会导致我称之为“误报”的问题)我看起来是登录的替代方案,并且经过多次测试没有经验的替代品(python,c ++,c#)后,我在nodejs中发现了一个sdk,无法适应我的需求。

SDK是https://github.com/tonistiigi/mega/,问题是下一个:

Node.JS返回一个16字节的数组,而PHP返回4个字(每个4字节)

Example

如何将数组转换为将其返回给nodejs?

抱歉我的英文!!

1 个答案:

答案 0 :(得分:1)

要从node.js转换为PHP格式:

buffer = require('buffer');

arr = [8,24,40,56,72,88,104,120,136,152,168,184,200,216,232,248];
console.log(arr.length);
buff = new Buffer(arr);
console.log(buff);

phpstreq = [];
phpinteq = [];
length = 4;
count = 0;
while (count < 16)
{
    phpinteq.push(buff.readUInt32BE(count,true))
    phpstreq.push(buff.slice(count,count+length));
    count += length;
}
console.log(phpinteq);
console.log(phpstreq);

上面的输出

[ 135800888, 1213753464, 2291706040, 3369658616 ]
[ <Buffer 08 18 28 38>,
  <Buffer 48 58 68 78>,
  <Buffer 88 98 a8 b8>,
  <Buffer c8 d8 e8 f8> ]

要从PHP转换为node.js格式:

<?php
$arr = [ 135800888, 1213753464, 2291706040, 3369658616 ];
$bytearray =[];

foreach ($arr as $byte4)
{
    $eq = unpack("C*", pack("N", $byte4));
    $bytearray = array_merge($bytearray,$eq);
}

print_r($bytearray);
?>

输出

Array
(
    [0] => 8
    [1] => 24
    [2] => 40
    [3] => 56
    [4] => 72
    [5] => 88
    [6] => 104
    [7] => 120
    [8] => 136
    [9] => 152
    [10] => 168
    [11] => 184
    [12] => 200
    [13] => 216
    [14] => 232
    [15] => 248
)

我上面使用了大端格式。由于你的输出模糊了,你必须自己检查一下。还要注意验证node.js中使用的输入数组。在node.js中,数组中的整数x必须是0 < x < 256(记住每个数字= 1个字节)。