所有你需要的是墊的toString(2)的輸出與零點遺令它的長度等於8。使用此功能填充
function padString(str:String, len:int, char:String, padLeft:Boolean = true):String{
var padLength:int = len - str.length;
var str_padding:String = "";
if(padLength > 0 && char.length == 1)
for(var i:int = 0; i < padLength; i++)
str_padding += char;
return (padLeft ? str_padding : "") + str + (!padLeft ? str_padding: "");
}
有了此功能的代碼看起來是這樣的,如果你想獲得一個〜應變給出正確的輸出
var bytes:ByteArray = new ByteArray();
bytes.endian = Endian.LITTLE_ENDIAN;
bytes.writeUTFBytes("a");
bytes.writeByte(0x0);
var t1:String = padString(bytes[0].toString(2), 8, "0"); // is now 01100001
var t2:String = padString(bytes[1].toString(2), 8, "0"); // is now 00000000
更新
g表示完整的byteArray,你可以使用一個迭代byteArray的函數。我寫了下面的函數,它似乎正常工作。試試看
// String Padding function
function padString(str:String, len:int, char:String, padLeft:Boolean = true):String{
// get no of padding characters needed
var padLength:int = len - str.length;
// padding string
var str_padding:String = "";
// loop from 0 to no of padding characters needed
// Note: this loop will not run if padLength is less than 1
// as i < padLength will be false from begining
for(var i:int = 0; i < padLength; i++)
str_padding += char;
// return string with padding attached either to left or right depending on the padLeft Boolean
return (padLeft ? str_padding : "") + str + (!padLeft ? str_padding: "");
}
// Return a Binary String Representation of a byte Array
function byteArrayToBinaryString(bArray:ByteArray):String{
// binary string to return
var str:String = "";
// store length so that it is not recomputed on every loop
var aLen = bArray.length;
// loop over all available bytes and concatenate the padded string to return string
for(var i:int = 0; i < aLen; i++)
str += padString(bArray[i].toString(2), 8, "0");
// return binary string
return str;
}
現在,你可以簡單地使用byteArrayToBinaryString()
功能是這樣的:
// init byte array and set Endianness
var bytes:ByteArray = new ByteArray();
bytes.endian = Endian.LITTLE_ENDIAN;
// write some data to byte array
bytes.writeUTFBytes("a");
bytes.writeByte(0x0);
// convert to binaryString
var byteStr:String = byteArrayToBinaryString(bytes); // returns 0110000100000000
要麼增加256你轉換爲字符串之前,然後去掉第一個數字,或者手動預先準備的之後適當數量的零。但爲什麼你需要創建二進制字符串來執行MD5?你知道ActionScript已經完全適合'uint'的按位運算符,對吧? –
既然你已經在編寫你自己的MD5算法,爲什麼不寫你自己的二進制toString呢?這很簡單。另外,你見過[這個圖書館](http://www.blooddy.by/en/crypto/)嗎?它包含*非常*快速的MD5功能。 – Cameron
我正在使用二進制字符串進行調試,以確保我已正確格式化我的輸入。 – Nimnam1