1. package cn.ubibi.wsblog.utils;
  2.  
  3. import java.io.UnsupportedEncodingException;
  4. import java.math.BigInteger;
  5.  
  6. public class Base58 {
  7.  
  8. private static final char[] ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();
  9. private static final int[] INDEXES = new int[128];
  10.  
  11. static {
  12. for (int i = 0; i < INDEXES.length; i++) {
  13. INDEXES[i] = -1;
  14. }
  15. for (int i = 0; i < ALPHABET.length; i++) {
  16. INDEXES[ALPHABET[i]] = i;
  17. }
  18. }
  19.  
  20. /**
  21. * Encodes the given bytes in base58. No checksum is appended.
  22. */
  23. public static String encode(byte[] input) {
  24. if (input.length == 0) {
  25. return "";
  26. }
  27. input = copyOfRange(input, 0, input.length);
  28. // Count leading zeroes.
  29. int zeroCount = 0;
  30. while (zeroCount < input.length && input[zeroCount] == 0) {
  31. ++zeroCount;
  32. }
  33. // The actual encoding.
  34. byte[] temp = new byte[input.length * 2];
  35. int j = temp.length;
  36.  
  37. int startAt = zeroCount;
  38. while (startAt < input.length) {
  39. byte mod = divmod58(input, startAt);
  40. if (input[startAt] == 0) {
  41. ++startAt;
  42. }
  43. temp[--j] = (byte) ALPHABET[mod];
  44. }
  45.  
  46. // Strip extra '1' if there are some after decoding.
  47. while (j < temp.length && temp[j] == ALPHABET[0]) {
  48. ++j;
  49. }
  50. // Add as many leading '1' as there were leading zeros.
  51. while (--zeroCount >= 0) {
  52. temp[--j] = (byte) ALPHABET[0];
  53. }
  54.  
  55. byte[] output = copyOfRange(temp, j, temp.length);
  56. try {
  57. return new String(output, "US-ASCII");
  58. } catch (UnsupportedEncodingException e) {
  59. throw new RuntimeException(e); // Cannot happen.
  60. }
  61. }
  62.  
  63. public static byte[] decode(String input) throws IllegalArgumentException {
  64. if (input.length() == 0) {
  65. return new byte[0];
  66. }
  67. byte[] input58 = new byte[input.length()];
  68. // Transform the String to a base58 byte sequence
  69. for (int i = 0; i < input.length(); ++i) {
  70. char c = input.charAt(i);
  71.  
  72. int digit58 = -1;
  73. if (c >= 0 && c < 128) {
  74. digit58 = INDEXES[c];
  75. }
  76. if (digit58 < 0) {
  77. throw new IllegalArgumentException("Illegal character " + c + " at " + i);
  78. }
  79.  
  80. input58[i] = (byte) digit58;
  81. }
  82. // Count leading zeroes
  83. int zeroCount = 0;
  84. while (zeroCount < input58.length && input58[zeroCount] == 0) {
  85. ++zeroCount;
  86. }
  87. // The encoding
  88. byte[] temp = new byte[input.length()];
  89. int j = temp.length;
  90.  
  91. int startAt = zeroCount;
  92. while (startAt < input58.length) {
  93. byte mod = divmod256(input58, startAt);
  94. if (input58[startAt] == 0) {
  95. ++startAt;
  96. }
  97.  
  98. temp[--j] = mod;
  99. }
  100. // Do no add extra leading zeroes, move j to first non null byte.
  101. while (j < temp.length && temp[j] == 0) {
  102. ++j;
  103. }
  104.  
  105. return copyOfRange(temp, j - zeroCount, temp.length);
  106. }
  107.  
  108. public static BigInteger decodeToBigInteger(String input) throws IllegalArgumentException {
  109. return new BigInteger(1, decode(input));
  110. }
  111.  
  112. //
  113. // number -> number / 58, returns number % 58
  114. //
  115. private static byte divmod58(byte[] number, int startAt) {
  116. int remainder = 0;
  117. for (int i = startAt; i < number.length; i++) {
  118. int digit256 = (int) number[i] & 0xFF;
  119. int temp = remainder * 256 + digit256;
  120.  
  121. number[i] = (byte) (temp / 58);
  122.  
  123. remainder = temp % 58;
  124. }
  125.  
  126. return (byte) remainder;
  127. }
  128.  
  129. //
  130. // number -> number / 256, returns number % 256
  131. //
  132. private static byte divmod256(byte[] number58, int startAt) {
  133. int remainder = 0;
  134. for (int i = startAt; i < number58.length; i++) {
  135. int digit58 = (int) number58[i] & 0xFF;
  136. int temp = remainder * 58 + digit58;
  137.  
  138. number58[i] = (byte) (temp / 256);
  139.  
  140. remainder = temp % 256;
  141. }
  142.  
  143. return (byte) remainder;
  144. }
  145.  
  146. private static byte[] copyOfRange(byte[] source, int from, int to) {
  147. byte[] range = new byte[to - from];
  148. System.arraycopy(source, from, range, 0, range.length);
  149.  
  150. return range;
  151. }
  152.  
  153. }

  

  1. package cn.ubibi.wsblog.utils;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5.  
  6. import java.security.MessageDigest;
  7. import java.util.Base64;
  8.  
  9. public class CryptoUtils {
  10.  
  11. private static final Logger LOGGER = LoggerFactory.getLogger(CryptoUtils.class);
  12.  
  13. private static final String ALGORITHM_MD5 = "MD5";
  14. private static final String ALGORITHM_SHA256 = "SHA-256";
  15. private static final String ALGORITHM_SHA1 = "SHA-1";
  16. private static final String CHAT_SET_UTF8 = "UTF-8";
  17. private static final String ENCODE_STRING_HEX = "hex";
  18. private static final String ENCODE_STRING_BASE64 = "base64";
  19. private static final String ENCODE_STRING_BASE58 = "base58";
  20.  
  21. //32个字符
  22. public static String encrypt_md5_hex(String str) {
  23. return encrypt_hash_function(str, ALGORITHM_MD5, CHAT_SET_UTF8, ENCODE_STRING_HEX);
  24. }
  25.  
  26. //24个字符
  27. public static String encrypt_md5_base64(String str) {
  28. return encrypt_hash_function(str, ALGORITHM_MD5, CHAT_SET_UTF8, ENCODE_STRING_BASE64);
  29. }
  30.  
  31. //22个字符
  32. public static String encrypt_md5_base58(String str) {
  33. return encrypt_hash_function(str, ALGORITHM_MD5, CHAT_SET_UTF8, ENCODE_STRING_BASE58);
  34. }
  35.  
  36. //40个字符
  37. public static String encrypt_sha1_hex(String str) {
  38. return encrypt_hash_function(str, ALGORITHM_SHA1, CHAT_SET_UTF8, ENCODE_STRING_HEX);
  39. }
  40.  
  41. //28个字符
  42. public static String encrypt_sha1_base64(String str) {
  43. return encrypt_hash_function(str, ALGORITHM_SHA1, CHAT_SET_UTF8, ENCODE_STRING_BASE64);
  44. }
  45.  
  46. //28个字符
  47. public static String encrypt_sha1_base58(String str) {
  48. return encrypt_hash_function(str, ALGORITHM_SHA1, CHAT_SET_UTF8, ENCODE_STRING_BASE58);
  49. }
  50.  
  51. //64个字符
  52. public static String encrypt_sha256_hex(String str) {
  53. return encrypt_hash_function(str, ALGORITHM_SHA256, CHAT_SET_UTF8, ENCODE_STRING_HEX);
  54. }
  55.  
  56. //44个字符
  57. public static String encrypt_sha256_base64(String str) {
  58. return encrypt_hash_function(str, ALGORITHM_SHA256, CHAT_SET_UTF8, ENCODE_STRING_BASE64);
  59. }
  60.  
  61. //44个字符
  62. public static String encrypt_sha256_base58(String str) {
  63. return encrypt_hash_function(str, ALGORITHM_SHA256, CHAT_SET_UTF8, ENCODE_STRING_BASE58);
  64. }
  65.  
  66. private static String encrypt_hash_function(String str, String algorithm, String chatset, String encodeMethod) {
  67. MessageDigest messageDigest;
  68. String encodeStr = "";
  69. try {
  70. messageDigest = MessageDigest.getInstance(algorithm);
  71. messageDigest.update(str.getBytes(chatset));
  72.  
  73. byte[] digest_bytes = messageDigest.digest();
  74.  
  75. if (ENCODE_STRING_BASE64.equals(encodeMethod)) {
  76. encodeStr = byte2Base64(digest_bytes);
  77. } else if (ENCODE_STRING_BASE58.equals(encodeMethod)) {
  78. encodeStr = Base58.encode(digest_bytes);
  79. } else {
  80. encodeStr = byte2Hex(digest_bytes);
  81. }
  82.  
  83. } catch (Exception e) {
  84. LOGGER.error("", e);
  85. }
  86. return encodeStr;
  87. }
  88.  
  89. private static String byte2Base64(byte[] bytes) {
  90. return Base64.getEncoder().encodeToString(bytes);
  91. }
  92.  
  93. private static String byte2Hex(byte[] bytes) {
  94. StringBuffer stringBuffer = new StringBuffer();
  95. String temp;
  96. for (int i = 0; i < bytes.length; i++) {
  97. temp = Integer.toHexString(bytes[i] & 0xFF);
  98. if (temp.length() == 1) {
  99. stringBuffer.append("0");
  100. }
  101. stringBuffer.append(temp);
  102. }
  103. return stringBuffer.toString();
  104. }
  105.  
  106. public static void main(String[] args) {
  107. String x = encrypt_sha256_base58("12345");
  108. System.out.println(x);
  109. System.out.println(x.length());
  110. }
  111.  
  112. }

  

Java BASE58 以及 md5,sha256,sha1的更多相关文章

  1. Java 常见摘要算法——md5、sha1、sha256

    目录 摘要算法简介 md5 使用jdk内置方法实现md5加密 使用bc方式实现md5加密 使用cc方式实现md5加密 sha1 使用jdk内置方法实现sha1加密 使用bc方式实现sha1加密 使用c ...

  2. MD5,SHA1及SHA256等哈希加密方法实现:Java,C#,Golang,Python

    哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用 ...

  3. MD5、SHA1加密java 16位32位

    MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...

  4. AndroidStudio 中查看获取MD5和SHA1值以及如何查看手机应用信息以及读取*.db数据库里面数据

    查看获取MD5和SHA1值具体操作方式链接 查看获取MD5和SHA1值实际操作命令CMD语句: C:\Users\Administrator>cd .android C:\Users\Admin ...

  5. 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)

    目录 一.数据加密标准 - Data Encryption Standard(DES) 二.高级加密标准 - Advanced Encryption Standard(AES) 三.消息摘要算法第五版 ...

  6. MD5和sha1加密算法

    在很多电子商务和社区应用中,我们都要存放很多的客户的资料,其中包括了很多的隐私信息和客户不愿被别人看到的信息,当然好有客户执行各种操作的密码,此时就需要对客户的信息进行加密再存储,目前有两种比较好的加 ...

  7. 接触到的加密算法MD5、SHA1(转)

    参考链接: https://blog.csdn.net/u012611878/article/details/54000607 https://blog.csdn.net/worm0527/artic ...

  8. java中使用MD5进行加密 BASE64Encoder 编码

    原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密     在各种应用系统的开发中,经常需 ...

  9. MD5和SHA-1

    MD5和SHA-1都是我们耳熟能详的术语了,很多人可能知道他们跟加密有关系,但是他们是怎么做到加密的,他们各自的特点又是什么.我来简单的讲一讲. MD5和SHA-1都被称作哈希(Hash)函数,用过J ...

随机推荐

  1. Hadoop、Strom集群实现日志自动清理

    Hadoop+Storm集群,运行一段时间ZooKeeper等关键进程自动停止运行,经检测是系统磁盘不足 系统磁盘100%: 查找大文件后发现,空间均被ZooKeeper产生的log占用 find / ...

  2. python学习6---字典合并

    1.针对python3版本 d1={'gao':1,'luo':2} d2={'liu':3,'jia':4} dictMerged1=dict(d1,**d2) print(dictMerged1) ...

  3. Go语言切片

    切片 Go 语言切片相当于是对数组的抽象. 由于Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比 ...

  4. Where are your from!!!!!!!!!!!! !Baby! {封装}

    在说Java 三个特性之前,我们先了解一下什么是面向对象,以及为什么Java是面向对象的语言. 面向对象是区别于面向过程的一种编程的思想.我们可以通过这个例子冰箱装大象的例子来了解一下面向对象与面向过 ...

  5. CentOS 7 下安装 Nginx

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安装 nginx 需要先 ...

  6. Java面试题2

    类加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制. 类从被加载到虚拟机内存中开 ...

  7. 详细说明进程管理工具htop、vmstat等相关命令

    htop htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统top.与top只提供最消耗资源进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器.swap和内存 ...

  8. 银行家算法C++程序

    此程序在Windows10    CodeBlocks17.12环境下测试运行,其他编程环境未经测试! 作业需求↓↓↓↓↓↓ 运行效果图如下 (codeblocks下载地址http://www.cod ...

  9. 为什么以sys无法远程登录数据库

    今天通过pl/sql连接一个数据库,普通用户能连接上,但是sys就连接不上,告诉我用户名密码错误.之前其实遇到过这个问题,然后就开始查找原因.整个过程记录如下,结果是扎心的,过程也不是完全都懂.记下来 ...

  10. Actifio如何保护和管理Oracle-带外篇

    引言 本文提供CDS带外环境下相关配置,保护和恢复Oracle的所需步骤. 目的是提供Oracle数据库配置前的详细说明,Actifio环境下发现和配置Oracle数据库,执行还原和恢复,以及配置Or ...