2014-01-06 74 views
1

我詳細介紹了項目: 我爲mega.co.nz使用PHP SDK,但由於密碼學問題(prepare_key太慢,偶爾會導致問題I描述爲「誤報」)我尋找登錄的替代方案,並且在沒有經驗的多種測試替代方案(python,C++,c#)之後,我在nodejs中發現了一個sdk,無法適應我的需求。鍵128位,返回數組16位

的SDK是https://github.com/tonistiigi/mega/,問題是下一個:而PHP返回4個字

Node.js的返回一個16個字節陣列(各4個字節)

Example

如何轉換陣列否則返回給nodejs?

對不起,我的英語!

回答

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); 

輸出爲上述

要從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 
) 

我已經使用了上面的big endian格式。既然你模糊你的輸出,你將不得不自己檢查。還要注意驗證node.js中使用的輸入數組。在node.js中,數組中的整數x必須是0 < x < 256(記住每個數字= 1個字節)。

+0

不錯,謝謝!多數民衆贊成在「u_k」完美的作品,但與「u_privk」我有一個問題。在PHP中,數組爲4,數組[0]的長度爲320,數組[1]的長度爲320,數組的長度爲628,數組[3]的長度爲318,NODE.JS返回一個多維的數組大小4什麼在數組[0]大小37,數組[1]大小37,數組[2]大小74,數組[3]大小37.想法? – Bayer

+0

@Bayer對於您所展示的示例,轉換很明顯。兩種情況下的尺寸都相同。你可以在一個例子中展示這個(如果你想要隱藏必要的細節)。我以前沒見過這個。 – user568109

+0

你可以在這裏查看數組:http://pastebin.com/28eSdVGC我需要顯示nodejs數組爲php._,感謝您的幫助 – Bayer