Base58編解碼

import java.math.BigInteger; public class Base58 { private static final char[] code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray(); private static final BigInteger big58 = new BigInteger("58") ; private static final BigInteger big0 = new BigInteger("0") ; public static void main(String[] args) throws Exception{ BigInteger bigInteger = new BigInteger("13463") ; System.out.println(bigInteger); String base58 = encode(bigInteger) ; System.out.println(base58); BigInteger aBigInteger = decode(base58) ; System.out.println(aBigInteger); System.out.println(bigInteger.equals(aBigInteger)); } public static String encode(BigInteger bigInteger) { StringBuilder sb = new StringBuilder(); BigInteger devide = bigInteger; do { BigInteger[] divideAndRemainder = devide.divideAndRemainder(big58); int remainder = divideAndRemainder[1].intValue(); devide = divideAndRemainder[0]; sb.append(code_string[remainder]); } while (!devide.equals(big0)); return sb.reverse().toString(); } public static BigInteger decode(String str58) throws Exception { BigInteger result = new BigInteger("0"); BigInteger one = new BigInteger("1"); char[] chars = str58.toCharArray(); int length = chars.length; for (int i = length - 1; i >= 0; i--) { char x = chars[i]; boolean flag = false; int j = 0 ; for (; j < code_string.length; j++) { if (x == code_string[j]) { flag = true; break; } } if (!flag) { throw new Exception("包含非法字符"); } result = result.add(BigInteger.valueOf(j).multiply(one)); one = one.multiply(big58); } return result; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章