亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Go中實現HashCash的算法(類型轉換問題)?

如何在Go中實現HashCash的算法(類型轉換問題)?

Go
MMTTMM 2021-05-04 13:30:41
我一直在嘗試在Go中實現HashCash算法!對于那些不知道的人-HashCash是一種阻止垃圾郵件的方法?;旧?,頭是由客戶端和服務器都知道的一些環境變量(電子郵件,時間戳等)構成的。隨機隨機數附加到標頭的末尾??蛻舳藝L試通過更改隨機數來強行強制執行部分哈希沖突(例如,前x位為0的情況)。HashCash之所以有效,是因為查找部分哈希沖突并不昂貴。服務器收到此標頭后,便會驗證其中的信息(因此它只能用于一個會話)并計算所得的哈希值。如果前x位為0,則表示已在客戶端計算機上花費了大量時間,用于計算沖突(在spambot上不會發生)對我而言,我只想編寫一個程序,確定客戶端找到x位的部分哈希沖突所花費的時間。我寫了這段代碼,如果int64有x位的哈希沖突,它將返回true / false 。func partialAllZeroes (zeroCount uint8, val int64) (bool, os.Error) {    setBitString := "1111111111111111111111111111111111111111111111111111111111111111"    unsetBitString := "0000000000000000000000000000000000000000000000000000000000000000"    setBitString = setBitString[0:zeroCount-1]    unsetBitString = unsetBitString[0:zeroCount-1]        zeroTest, e := strconv.Btoi64(setBitString, 2) // 64 0bits    zeroes, e   := strconv.Btoi64(unsetBitString, 2) // 64 1bits        if e != nil {        return false, e    }    result := val & zeroTest    switch {        case result == zeroes:            return true, nil        case result != zeroes:            return false, nil    }        return false, os.NewError("")}我當前的問題是我遇到很多類型轉換問題。例如,我只能對int64類型進行操作,因為這就是strconv.Btoi64返回的內容。我還在研究的另一個問題是,哈希函數以字節數組形式返回,我不知道如何將其轉換為int64。以下是我當前的哈希碼-hasher := sha1.New()baseCollisionString := "BASE COLLISION STRING"nonce := "12345"hasher.Write([]byte(strings.Join(baseCollisionString, nonce)))testCollision := hasher.Sum()// Somehow I must convert the first x bits of testCollision into an int64 type, so I can use partialAllZeroes with it
查看完整描述

3 回答

  • 3 回答
  • 0 關注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號