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;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.