關於MD5解析的疑問

1、對於常理說& 0xFF是沒有改變byzheng 的疑問

for(byte by : byMd5){
        String i = Integer.toBinaryString(by);
        int byzheng = by;
        byzheng = by & 0xFF;

        if(byzheng > 0x10){
        stringBuffer.append("0");        
        }
        stringBuffer.append(Integer.toHexString(by & 0xFF));        
        }


這裏我驗證了,當by是-80的時候,int byzheng = by 這裏的byzheng依舊是-80,而byzheng = by & 0xFF確是80,這是因爲,第一個是直接傳值,而第二個是講-80的二進制&,雖然與0xFF取與並沒有變化,但是賦值給byzheng 的時候,是將二進制轉換爲十進制的,所以數值開始發生變化。

以下是數值的變化過程:

by = -80;

(二進制)by = 01010000(這是80,再取反加一得到-80)=10110000

(二進制)0xFF = 11111111

by & 0xFF

10110000

&

11111111

//取與,上下都等於1的時候,纔是1,其餘爲0,所以:

結果:10110000(沒變)

再將10110000轉爲十進制等於176


所以下面的byzheng = by & 0xFF 是等於176,而上面的等於-80

MD5這裏的做法就是爲了取正數





2、對於爲什麼要小於0x10的時候加0的疑問

因爲這裏是保證兩位,十六進制的0x10就是十進制的16,當小於16的時候,對於16進制來說,就是一位數,顯然是少了一位的,所以爲了保證都是兩位的數,在此之前加上1位0作爲填充



可以自行代碼調試看看!不足之處,請糾正!

發佈了57 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章