前言
網上看到好幾個相同的錯誤版本,因此提供下正確的。
代碼
找到的錯誤版本
func compareSha256(str1 string,str2 string)int{
a := sha256.Sum256([]byte(str1))
b := sha256.Sum256([]byte(str2))
num := 0
//循環字節數組
for i:=0;i<len(a);i++{
//1個字節8個bit,移位運算,獲取每個bit
for m:=1;m<=8;m++{
//比較每個bit是否相同
if (a[i] >> uint(m))!=(b[i] >>uint(m)){
num++
}
}
}
return num
}
其中, 判斷bit位是否相同是這麼寫的
if (a[i] >> uint(m))!=(b[i] >>uint(m)) ??? 不應該是取出每個bit,來判斷是否同爲1或者同爲0嗎?直接右移判相等是什麼操作???
以45=(00101101)2 與 75=(01001011)2 爲例最後兩次右移相等,按上述計算方法結果爲6,實際不同的bit只有4個。
正確版本提供如下
func compareSha256(str1 string, str2 string) int {
a := sha256.Sum256([]byte(str1))
b := sha256.Sum256([]byte(str2))
num := 0
// 循環字節數組
for i := 0; i < len(a); i++ {
for m := 0; m <= 7; m++ { // 對比字節是否相同
if (a[i] & (1<<m)) != (b[i] & (1<<m)) {
num++
}
}
}
return num
}