2011-10-19 44 views
0

我將一個swf項目轉換爲php,我不太擅長動作,所以我需要幫助將actionscript3中的函數Hex.toArray,Hex.fromString,Base64.encodeByteArray轉換爲php。將一些AS函數轉換爲php

的ActionScript

public function spawn(query_str:String, key:String, token:String = "") : String{ 
    var tmp1:* = key + "&" + token; 
    var tmp2:* = Crypto.getHMAC("sha1"); 
    var tmp3:* = Hex.toArray(Hex.fromString(tmp1)); 
    var tmp4:* = Hex.toArray(Hex.fromString(query_str)); 
    var tmp5:* = tmp2.compute(tmp3, tmp4); 
    return Base64.encodeByteArray(tmp5); 
} 

這是PHP函數I轉換,但兩種功能的結果是不同的

function spawn($query_str, $key, $token = ''){ 
    $tmp1 = $key . "&" . $token; 
    $tmp3 = pack("H*" , bin2hex($tmp1)); 
    $tmp4 = pack("H*" , bin2hex($query_str)); 
    $tmp5 = hash_hmac('sha1', $tmp4, $tmp3); 
    return base64_encode($tmp5); 
} 
+0

在hash_hmac中,您已經將參數放入$ tmp4,然後是$ tmp3。這是預期的嗎? –

+0

是的,因爲在AS中是關鍵的數據。在PHP是數據,關鍵 – complez

回答

1

可以代替hex2bin在PHP中使用bin2hex,和pack("H*", ...)。 PHP中主要使用的base64函數是base64_encodebase64_decode

數組很少用於數據表示;二進制數據通常保存在PHP中的字符串中。但如果真的需要$array = array_map("ord", str_split($string));會做。

+0

嗨,感謝您的幫助。我編輯了我的問題,你能看看嗎? – complez

+0

我只能告訴你,'pack(「H *」,bin2hex($ tmp1))'是沒有意義的,因爲它首先將字符串轉換爲hexnumbers,並將hexnumbers轉換回字符串。而你的變量名稱是不可能遵循的。 – mario

+0

你可以將這行轉換爲php代碼嗎? Hex.toArray(Hex.fromString(str)); – complez