2019独角兽企业重金招聘Python工程师标准>>>

定义

为了更简洁方便地表示长串的数字,许多计算机系统会使用一种以数字和字母组成的大于十进制的表示法。例如,传统的十进制计数系统使用0-9十个数字,而十六进制系统使用了额外的 A-F 六个字母。一个同样的数字,它的十六进制表示就会比十进制表示更短。更进一步,Base64使用了26个小写字母、26个大写字母、10个数字以及两个符号(例如“+”和“/”),用于在电子邮件这样的基于文本的媒介中传输二进制数据。Base64通常用于编码邮件中的附件。

Base58是一种基于文本的二进制编码格式,用在比特币和其它的加密货币中。这种编码格式不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。Base58是Base64编码格式的子集,同样使用大小写字母和10个数字,但舍弃了一些容易错读和在特定字体中容易混淆的字符。具体地,Base58不含Base64中的0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i),以及“+”和“/”两个字符。简而言之,Base58就是由不包括(0,O,l,I)的大小写字母和数字组成。

Base58 和 Base64 一样是一种二进制转可视字符串的算法,主要用来转换大整数值。区别是,转换出来的字符串,去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。不同的应用实现中, Base58 最后查询的字母表可能不同,所以没有具体的标准。可用字符

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

目的

本文将解释Base58。Base58是一种用于比特币的技术。
本文旨在通过代码了解实现方式。

环境准备

java 版本 oracle jdk 1.8.0_77

eclipse or idea

Base58应用例子

  • short URLs for Flickr
  • Ripple
  • Bitcoin

字符串顺序

short URLs for Flickr

123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ

比特币

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Monero 地址

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Ripple 地址

rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

代码实现

Base58.java


import javax.xml.bind.DatatypeConverter;/*** Created by andyfeng on 2018/1/8 13:13.*/
public class Base58 {public static final char[] ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();private static final char ENCODED_ZERO = ALPHABET[0];public Base58() {}/*** return string encode using base58* @param str word* @return encoded word*/public String encode(String str) {// getBytebyte [] b = str.getBytes();// string → HexString s_hex = DatatypeConverter.printHexBinary(b);// Hex → Decimallong decimal = Long.valueOf(s_hex, 16);// Decimal → 58 kinds of charactersStringBuffer res = new StringBuffer();while (decimal > 0) {char c = ALPHABET[(int)decimal%58];res.append(c);decimal = decimal/58;}// zero byte confirmbyte [] temp_b = str.getBytes();for (int i = 0; i < temp_b.length; i++) {if (temp_b[i] != 0) {break;}res.append(ENCODED_ZERO);}return res.reverse().toString();}/*** return original string* @param encoded word* @return original word*/public String decode(String str) {int decimal = 0;// restore decimal.char []chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {char temp_c = chars[i];int index_num = 0;for (int j = 0; j < ALPHABET.length; j++) {if (ALPHABET[j] == temp_c) {index_num = j;}}decimal = decimal*58;decimal = decimal + index_num;}// Decimal → HexString s_hex = Integer.toHexString((int)decimal);// Hex → stringbyte[] bytes = DatatypeConverter.parseHexBinary(s_hex);return new String(bytes);}public static void main(String [] args) {Base58 base = new Base58();System.out.println(base.encode("abc"));System.out.println(base.decode("ZiCa"));}}

编码的实现步骤

1.将字符串转换为十六进制

2.将十六进制转换为十进制

3.将十进制转换为58中字符

4.颠倒字符串的顺序

解码的实现

1.将编码的字符串转换为十进制

2.将十进制转换为十六进制

3.将十六进制转换为字符串。

参考文章

http://java-lang-programming.com/en/articles/23

https://www.jianshu.com/p/e002931bb38b

https://www.jianshu.com/p/225ff9439132

转载于:https://my.oschina.net/andyfeng/blog/1603905

比特币技术Base58相关推荐

  1. 比特币未来几个月怎么样_您需要了解的关于比特币技术的未来

    比特币未来几个月怎么样 by Subhan Nadeem 由Subhan Nadeem 您需要了解的关于比特币技术的未来 (What You Need to Know About the Future ...

  2. 比特币技术公司创始人:ICO是一场被骗子玩弄的网络泡沫

    国内ICO项目累计融资规模约合人民币26.16亿元,累计参加人次达10.5万. 最近半年来,比特币的价格可以说是水涨船高,从最初的几千元一路飙到现在三万多人民币,而随着比特币的大热,也催生了一批靠着虚 ...

  3. java base58编码_区块链技术日记:Base58和Base58Check编码

    原标题: 区块链技术日记:Base58和Base58Check编码 为了更简洁方便地表示长串的数字,许多计算机系统会使用一种以数字和字母组成的大于十进制的表示法.例如,传统的十进制计数系统使用0-9十 ...

  4. [转] 比特币从“不了解”到“被误解”——详解区块链技术

    [From] http://news.ifeng.com/a/20170518/51115911_0.shtml 编者按:本文由 OKLink 区块链研究院投稿,OKlink 为国内领先的比特币交易平 ...

  5. 区块链和比特币的 6 个神话:揭穿了这项技术的有效性

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! [CSDN 编者按]在本文中,作者列出了比特币的六个主要缺点,以及它使用的区块链版本,让区块 ...

  6. 一篇文章让你了解区块链技术的发展阶段

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链是由一系列技术实现的全新去中心化经济组织模式,2009年诞生于比特币系统的构建,2017年成为全球经济热点,但区块 ...

  7. 比特币要升级成为“比特币现金”

    2019独角兽企业重金招聘Python工程师标准>>> 比特币(Bitcoin),是一种全球通用的加密电子货币且完全交由用户们自治的交易工具.是一种建立在全球网络上的货币,它是一种没 ...

  8. Schnorr签名与比特币隐私的必然性

    数字签名是在线主权的支柱.公钥密码学在 1976 年的出现,为创建全球通信媒介.互联网以及全新的货币形式比特币铺平了道路.虽然从那时起公钥加密的基本属性并没有太大变化,但现在密码学家的工具箱中有许多开 ...

  9. Roger Ver:比特币已经过时,以太坊和比特币现金将实现超越

    Roger Ver认为,比特币待在加密货币"王者宝座"上的日子已经不多了.在接受<独立报>采访是,这位前比特币布道者表示,在技术上,如今很多其他加密货币已经超越了比特币 ...

  10. 如何简单快速的了解区块链技术(结尾有惊喜)

    女主宣言 "区块链"这一前沿的技术正在悄悄的改变着这个世界,比特币的疯狂已经足以证明这一概念所带来的恐怖级效应.相信未来会有更多的行业和领域会被它所影响,可是"区块链&q ...

最新文章

  1. mysql 执行顺序 别名_sql语句的执行顺序和别名问题
  2. C#中选择文件的例子
  3. 不允许使用不完整的类型解决方法
  4. 洛谷P1372 又是毕业季IP1414 又是毕业季II[最大公约数]
  5. STM32 电机教程 11 - BLDC 6 步方波开环速度控制
  6. Linux / OpenWRT / 目录功能说明
  7. PHP、C#、通用的DES加密
  8. IT行业学习网站汇总
  9. CentOS 6.5搭建Redis3.2.8单机分布式集群
  10. 以色列网络武器出口对象国从102个锐减至37个
  11. Linux 如何打开pyo文件,Python的文件类型
  12. 在Lua中“优雅”地使用Protobuf
  13. 网络机顶盒固件编辑器_电信机顶盒刷固件补丁下载
  14. P4565 [CTSC2018]暴力写挂 题解
  15. 微信应用架构!!-----微信应用能力篇
  16. Gartner发布2021年新兴技术成熟度曲线,三大新兴技术趋势主题
  17. dentry与inode
  18. 小程序云开发(九):WeUI
  19. 机械专业转嵌入式软件经历
  20. 中国石油大学(北京)-《外国文学作品选读》在线考试

热门文章

  1. 利用java反射原理写了一个简单赋值和取值通用类【改】
  2. 机器学习第六回——无监督学习
  3. 利用IDLE对 dem进行批量拼接处理
  4. Arcgis利用点数据集(txt数据)转为shp线数据(含案例)
  5. Python-GDAL读取遥感影像直方图统计
  6. 使用Python的Arcpy.mapping 模块自动化制图
  7. java爬取_java实现爬取知乎用户基本信息
  8. 中国男性的私密数据大赏,女生勿入!
  9. 程序员相亲图鉴,太真实了!
  10. 今天我点亮了CSDN博客专家殊荣