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字元。為了知道新增...