java 58_java base58

public classBase58 {private static final char[] ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();private static final int BASE_58 =ALPHABET.length;private static final int BASE_256 = 256;private static final int[] INDEXES = new int[128];static{for (int i = 0; i < INDEXES.length; i++) {

INDEXES[i]= -1;

}for (int i = 0; i < ALPHABET.length; i++) {

INDEXES[ALPHABET[i]]=i;

}

}//base58

public static String encode(byte[] input) {if (input.length == 0) {return "";

}

input= copyOfRange(input, 0, input.length);int zeroCount = 0;while (zeroCount < input.length && input[zeroCount] == 0) {++zeroCount;

}byte[] temp = new byte[input.length * 2];int j =temp.length;int startAt =zeroCount;while (startAt

}

temp[--j] = (byte) ALPHABET[mod];

}while (j < temp.length && temp[j] == ALPHABET[0]) {++j;

}while (--zeroCount >= 0) {

temp[--j] = (byte) ALPHABET[0];

}byte[] output =copyOfRange(temp, j, temp.length);return newString(output);

}// public static byte[] decode(String input) {if (input.length() == 0) {return new byte[0];

}byte[] input58 = new byte[input.length()];for (int i = 0; i < input.length(); ++i) {char c =input.charAt(i);int digit58 = -1;if (c >= 0 && c < 128) {

digit58=INDEXES[c];

}if (digit58 < 0) {throw new RuntimeException("Not a Base58 input: " +input);

}

input58[i]= (byte) digit58;

}int zeroCount = 0;while (zeroCount < input58.length && input58[zeroCount] == 0) {++zeroCount;

}byte[] temp = new byte[input.length()];int j =temp.length;int startAt =zeroCount;while (startAt

}

temp[--j] =mod;

}while (j < temp.length && temp[j] == 0) {++j;

}return copyOfRange(temp, j -zeroCount, temp.length);

}private static byte divmod58(byte[] number, intstartAt) {int remainder = 0;for (int i = startAt; i < number.length; i++) {int digit256 = (int) number[i] & 0xFF;int temp = remainder * BASE_256 +digit256;

number[i]= (byte) (temp /BASE_58);

remainder= temp %BASE_58;

}return (byte) remainder;

}private static byte divmod256(byte[] number58, intstartAt) {int remainder = 0;for (int i = startAt; i < number58.length; i++) {int digit58 = (int) number58[i] & 0xFF;int temp = remainder * BASE_58 +digit58;

number58[i]= (byte) (temp /BASE_256);

remainder= temp %BASE_256;

}return (byte) remainder;

}private static byte[] copyOfRange(byte[] source, int from, intto) {byte[] range = new byte[to -from];

System.arraycopy(source, from, range,0, range.length);returnrange;

}public static voidmain(String[] args) {

String code="EOS57cvmveSeGpfcLC9guzoRsF4q95CWJKCLZzME5tnKYvWf5Bja1";byte[] input=code.getBytes();

String str=encode(input);

System.out.println(str);

}

}

【转载】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值