最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟

 更新時間:2021年05月13日 11:42:51   作者:m0_37719047  
這篇文章主要介紹了go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟,利用生產的隨機數(shù)采用橢圓加密算法生成公鑰,具體步驟實例代碼請參考下本文

由公鑰生成比特幣地址步驟

  1. 隨機取一個32位隨機數(shù)作為私鑰
  2. 利用生產的隨機數(shù)采用橢圓加密算法生成公鑰
  3. 計算公鑰的sha256哈希值
  4. 計算RIPEMD-160哈希值
  5. 第4步結果加上版本號(比特幣為0x00)
  6. 對第5步結果取兩次sha256哈希值
  7. 取上一步結果的前四個字節(jié)
  8. 將第7步結果加到第步的結果后面作為校驗
  9. 利用base58對第8步結果進行變化得到地址

生成地址代碼如下

func (w Wallet) GetAddress() []byte {
    pubKeyHash := HashPubKey(w.PublicKey)

    versionedPayload := append([]byte{version}, pubKeyHash...)
    checksum := checksum(versionedPayload)

    fullPayload := append(versionedPayload, checksum...)
    address := Base58Encode(fullPayload)

    return address
}
func HashPubKey(pubKey []byte) []byte {
    publicSHA256 := sha256.Sum256(pubKey)

    RIPEMD160Hasher := ripemd160.New()
    _, err := RIPEMD160Hasher.Write(publicSHA256[:])
    publicRIPEMD160 := RIPEMD160Hasher.Sum(nil)

    return publicRIPEMD160
}

func checksum(payload []byte) []byte {
    firstSHA := sha256.Sum256(payload)
    secondSHA := sha256.Sum256(firstSHA[:])

    return secondSHA[:addressChecksumLen]
}

校驗比特幣

地址是否正確代碼

addressChecksumLen:=4
func ValidateAddress(address string) bool {
    pubKeyHash := Base58Decode([]byte(address))
    actualChecksum := pubKeyHash[len(pubKeyHash)-addressChecksumLen:]
    version := pubKeyHash[0]
    pubKeyHash = pubKeyHash[1 : len(pubKeyHash)-addressChecksumLen]
    targetChecksum := checksum(append([]byte{version}, pubKeyHash...))
    return bytes.Compare(actualChecksum, targetChecksum) == 0
}

Base58Decode是對比特幣地址進行解碼,然后取后四位校驗位actualChecksum,利用去掉校驗位的pubKeyHash再次算出校驗位與地址的校驗位做出對比,即可驗證地址的正確性。 其中用到的函數(shù)有:

func checksum(payload []byte) []  //利用兩次shah256求校驗位
 byte {
    firstSHA := sha256.Sum256(payload)
    secondSHA := sha256.Sum256(firstSHA[:])

    return secondSHA[:addressChecksumLen]
}

這是解碼的函數(shù),已經有不少現(xiàn)有的代碼支持,故不作講解

func Base58Decode(input []byte) []byte {
    result := big.NewInt(0)
    zeroBytes := 0

    for b := range input {
        if b == 0x00 {
            zeroBytes++
        }
    }

    payload := input[zeroBytes:]
    for _, b := range payload {
        charIndex := bytes.IndexByte(b58Alphabet, b)
        result.Mul(result, big.NewInt(58))
        result.Add(result, big.NewInt(int64(charIndex)))
    }

    decoded := result.Bytes()
    decoded = append(bytes.Repeat([]byte{byte(0x00)}, zeroBytes), decoded...)

    return decoded
}

以上就是go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟的詳細內容,更多關于go語言比特幣地址校驗的資料請關注腳本之家其它相關文章!

相關文章

  • go 判斷兩個 slice/struct/map 是否相等的實例

    go 判斷兩個 slice/struct/map 是否相等的實例

    這篇文章主要介紹了go 判斷兩個 slice/struct/map 是否相等的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • goland 設置注釋模板的過程圖文詳解

    goland 設置注釋模板的過程圖文詳解

    這篇文章主要介紹了goland 設置注釋模板的過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-12-12
  • Hugo 游樂場內容初始化示例詳解

    Hugo 游樂場內容初始化示例詳解

    這篇文章主要為大家介紹了Hugo 游樂場內容初始化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Go語言實現(xiàn)常用排序算法的示例代碼

    Go語言實現(xiàn)常用排序算法的示例代碼

    排序算法是在生活中隨處可見,也是算法基礎,因為其實現(xiàn)代碼較短,應用較常見。所以在面試中經常會問到排序算法及其相關的問題。本文為大家整理了一些Go語言中常用排序算法的實現(xiàn),需要的可以參考一下
    2022-08-08
  • GO比較兩個對象是否相同實戰(zhàn)案例

    GO比較兩個對象是否相同實戰(zhàn)案例

    我們時常有比較兩個值是否相等的需求,下面這篇文章主要給大家介紹了關于GO比較兩個對象是否相同的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Go來合并兩個csv的實現(xiàn)示例

    Go來合并兩個csv的實現(xiàn)示例

    本文主要介紹了Go來合并兩個csv的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • golang實現(xiàn)循環(huán)隊列的示例代碼

    golang實現(xiàn)循環(huán)隊列的示例代碼

    循環(huán)隊列是一種使用固定大小的數(shù)組來實現(xiàn)隊列的數(shù)據(jù)結構,本文主要介紹了golang實現(xiàn)循環(huán)隊列的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Go語言fmt.Sprintf格式化輸出的語法與實例

    Go語言fmt.Sprintf格式化輸出的語法與實例

    Go 可以使用 fmt.Sprintf 來格式化字符串,下面這篇文章主要給大家介紹了關于Go語言fmt.Sprintf格式化輸出的語法與實例,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 詳解Go語言中io/ioutil工具的使用

    詳解Go語言中io/ioutil工具的使用

    這篇文章主要為大家詳細介紹了Go語言中io/ioutil工具的使用,從而簡化文件操作。文中是示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-05-05
  • Go代碼的組織和格式化規(guī)則實戰(zhàn)示例

    Go代碼的組織和格式化規(guī)則實戰(zhàn)示例

    這篇文章主要為大家介紹了Go代碼的組織和格式化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論

泸定县| 衡阳县| 遂溪县| 砚山县| 苗栗县| 新乡县| 昌都县| 石屏县| 长沙县| 沭阳县| 汽车| 光泽县| 壶关县| 信阳市| 保靖县| 清流县| 苏尼特左旗| 白朗县| 平安县| 务川| 兰考县| 广水市| 平潭县| 陈巴尔虎旗| 双流县| 长沙县| 台东市| 洪洞县| 乌苏市| 民权县| 沐川县| 临城县| 元江| 罗甸县| 太湖县| 崇仁县| 荔波县| 祥云县| 从化市| 商河县| 芷江|