Base58Check編碼實現示例

2021-08-27 04:50:34 字數 1231 閱讀 7832

base58check編碼是在base58編碼的基礎上,增加了校驗碼。

編碼流程:

1. 計算原碼的sha-256雜湊值

2. 再次計算步驟1結果的sha-256雜湊值

3. 取步驟2的前4位元組作為校驗碼

4. 將步驟3獲取的校驗碼新增到原碼末尾

5. 對步驟4的結果進行base58編碼

解碼流程:

1. 對編碼資料進行base58解碼

2. 去除步驟1結果的校驗碼,即最末4個位元組

3. 計算步驟2結果的sha-256雜湊值

4. 再次計算步驟3結果的sha-256雜湊值

5. 取步驟4結果的前4個位元組,並與步驟2中最末4位元組進行校驗碼匹配

6. 匹配成功返回解碼資料,否則返回失敗

bitcoin (0.16.0) 編碼實現原始碼:

std::string encodebase58check(const

std::vector

char>& vchin)

bitcoin (0.16.0) 解碼實現原始碼:

bool decodebase58check(const

char* psz, std::vector

char>& vchret)

// re-calculate the checksum, ensure it matches the included 4-byte checksum

uint256 hash = hash(vchret.begin(), vchret.end() - 4);

if (memcmp(&hash, &vchret[vchret.size() - 4], 4) != 0)

vchret.resize(vchret.size() - 4);

return

true;

}bool decodebase58check(const

std::string& str, std::vector

char>& vchret)

測試原始碼:

base58編碼與解碼實現

base58編碼是位元幣位址生成演算法中的最後乙個步驟。演算法簡單,和上大學時候學過的十進位制轉十六進製制一樣,只不過現在變成了十進位制轉58進製,核心過程就是不斷的除58求餘。下面是go語言的實現過程 func base58encode data byte string bignum.divmod...

Bitcoin 位址原理 1 Base58編碼

1.base64編碼 使用了26個小寫字母 26個大寫字母 10個數字以及兩個符號 例如 和 用於在電子郵件這樣的基於文字的媒介中傳輸二進位制資料。base64字母表 索引對應字元 索引對應字元 索引對應字元 索引對應字元0a 17r34i 51z1b 18s35j 5202c 19t36k 531...

base64編碼實現

package com.ls.hfvj 思路 base64只有64個字元,因此只需要6個二進位制位來表示 實現 每3個位元組為一組湊4個base64字元。多餘乙個位元組補4個0bit位 共12位 湊成2個base64字元 多餘兩個位元組補2個bit位 共18位 湊成3個base64字元。為了知道新增...