go语言 base58编码解码
package main import (
"bytes"
"encoding/hex"
"fmt"
"math/big"
) var base58Alphabets = []byte("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") func main() {
// testReverse() str := "a"
_, res := Base58Encode([]byte(str))
fmt.Println("res=", res)
resByte, resStr := Base58Decode([]byte(res))
fmt.Println("resByte=", resByte)
fmt.Println("resStr=", resStr) } // Base58Encode 编码
func Base58Encode(input []byte) ([]byte, string) {
x := big.NewInt().SetBytes(input)
fmt.Println("x=", x)
base := big.NewInt()
zero := big.NewInt()
mod := &big.Int{}
var result []byte
// 被除数/除数=商……余数
fmt.Println("开始循环-------")
for x.Cmp(zero) != {
x.DivMod(x, base, mod)
fmt.Println("mod=", mod)
fmt.Println("x=", x)
result = append(result, base58Alphabets[mod.Int64()])
fmt.Println("一次循环结束-------")
}
ReverseBytes(result)
return result, string(result)
} // Base58Decode 解码
func Base58Decode(input []byte) ([]byte, string) {
result := big.NewInt()
for _, b := range input {
charIndex := bytes.IndexByte(base58Alphabets, b)
result.Mul(result, big.NewInt())
result.Add(result, big.NewInt(int64(charIndex)))
}
decoded := result.Bytes()
if input[] == base58Alphabets[] {
decoded = append([]byte{0x00}, decoded...)
}
return decoded, string(decoded)
} func testReverse() {
str := ""
// data := []byte(str)
data, _ := hex.DecodeString(str)
fmt.Println(data)
ReverseBytes(data)
fmt.Println(fmt.Sprintf("%v", data))
} // ReverseBytes 翻转字节
func ReverseBytes(data []byte) {
for i, j := , len(data)-; i < j; i, j = i+, j- {
data[i], data[j] = data[j], data[i]
}
}
go语言 base58编码解码的更多相关文章
- go语言 base64编码解码
package main import ( "encoding/base64" "fmt" ) func main() { str := "Man&q ...
- C语言实现Base64编码/解码
Bse64是一种以64个可打印字符对二进制数据进行编码的编码算法.base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新 ...
- 如何使用 PHP 语言来编码和解码 JSON 对象
PHP JSON 本章节我们将为大家介绍如何使用 PHP 语言来编码和解码 JSON 对象. 环境配置 在 php5.2.0 及以上版本已经内置 JSON 扩展. JSON 函数 函数 描述 json ...
- 理解netty对protocol buffers的编码解码
一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...
- 字符集&各种编码&编码解码
要理解乱码问题,首先需要理解几个概念:字符集.编码.编码规则.乱码 1. 字符集: 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集(Charact ...
- Py3编码解码
Py3编码解码 写的不好请谅解,有问题欢迎指出. python2.x中的解决方案(图片来源于网络) #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- 比特币中的Base58 编码
base58和base64一样是一种二进制转可视字符串的算法,主要用来转换大整数值.区别是,转换出来的字符串,去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母 ...
- Go语言安全编码规范-翻译(分享转发)
Go语言安全编码规范-翻译 本文翻译原文由:blood_zer0.Lingfighting完成 如果翻译的有问题:联系我(Lzero2012).匆忙翻译肯定会有很多错误,欢迎大家一起讨论Go语言安全能 ...
- 编码解码--url编码解码
url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式.URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通 ...
随机推荐
- 学习MVC框架,处理分页和删除分页转跳的问题
第一次写博客,文采不好请多见谅,这里主要是写一下,自己是如何处理分页问题,我想初学者也遇到过这个问题. 分页的情况下,编辑信息有返回和编辑2个按钮,操作后都是应该返回原分页界面,使用TempData把 ...
- css常用样式对文本的处理演练
CSS文本属性可定义文本的外观,这是毫无疑问的,其次css可以通过以下属性改变文字的排版,比方说letter-spacing实现字符间距text-indent: 2em;完成首行缩进2字符word-s ...
- redis 5.0.7 源码阅读——动态字符串sds
redis中动态字符串sds相关的文件为:sds.h与sds.c 一.数据结构 redis中定义了自己的数据类型"sds",用于描述 char*,与一些数据结构 typedef c ...
- go 并发编程
进程 线程 协程 设置golang运行cpu数 1.主线程和协程同时执行 package main import ( "fmt" "strconv" " ...
- Java操作RocketMQ
第一步:导入依赖 <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>ro ...
- C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)
C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535) 一:报错 Invalid row ...
- python数据类型(第二弹)
针对上一篇博文提出的若干种python数据类型,笔者将在本文和后续几篇博文中详细介绍. 本文着重介绍python数据类型中的整数型.浮点型.复数型.布尔型以及空值. 对于整数型.浮点型和复数型数据,它 ...
- #AcWing系列课程Level-2笔记——3. 整数二分算法
整数二分算法 编写整数二分,记住下面的思路,代码也就游刃有余了! 1.首先找到数组的中间值,mid=(left+right)>>1,区间[left, right]被划分成[left, mi ...
- 如何开启音乐二倍速?不下载其他软件【win10】
使用windows自带的windows media player开启N倍速 绪言 额……暑假将终,我想起了件事:貌似我忘记帮你们开好二倍速再走了. 可能我回(六班)来的机会也比较少,废话不多说,直接看 ...
- ClosedXML、DocumentFormat.OpenXml导出DataTable到Excel
在很多系统中都用到导出,使用过多种导出方式,觉得ClosedXML插件的导出简单又方便. 并且ClosedXML.DocumentFormat.OpenXml都是MIT开源. 首先通过 Nuget 安 ...