base58包与ripemd160的使用

一、base58

base58和base64一样是一种二进制转可视字符串的算法主要用来转换大整数值。区别是,转换出来的字符串,去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。

结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。

编码流程 (本质为大数与字符串的转化)
输入为bytes,比如:[0x00, 0xFF]

忽略前面的0x00得到数字256

256通过base58编码为字符串”5Q”,因为要处理0x00,所以得到字符串”15Q”

把字符串“15Q”转化为bytes: [0x49, 0x53, 0x81]

二、ripemd160

哈希值的输出值一般是16进制的字符串。而16进制字符串,每两个字符占一个字节。我们知道,一个字节=8bit.

sha256为例: 
256bit->6416进制字符。

package main

import (
    "fmt"
    "crypto/sha256"
)

func main() {
    hasher := sha256.New()
    hasher.Write([]byte("The quick brown fox jumps over the lazy dog"))
    hashBytes := hasher.Sum(nil)
    hashString := fmt.Sprintf("%x", hashBytes)
    fmt.Println(hashString)
}
$ d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
  •  

ripemd
160bit->4016进制字符。

cdcdGOPATH/src 
mkdirgolang.orgmkdirgolang.org cd golang.org 
mkdirxmkdirx cd x 
$ git clone https://github.com/golang/crypto.git

package main

import (
    "fmt"
    "golang.org/x/crypto/ripemd160"
)

func main() {
    hasher := ripemd160.New()
    hasher.Write([]byte("The quick brown fox jumps over the lazy dog"))
    hashBytes := hasher.Sum(nil)
    hashString := fmt.Sprintf("%x", hashBytes)
    fmt.Println(hashString)
}
$ 37f332f68db77bd9d7edd4969571ad671cf9dd3b

 

猜你喜欢

转载自blog.csdn.net/weixin_42117918/article/details/84307925