### Question:
Base58 { public static String encode(byte[] input) { if (input.length == 0) { return ""; } int zeros = 0; while (zeros < input.length && input[zeros] == 0) { ++zeros; } input = Arrays.copyOf(input, input.length); char[] encoded = new char[input.length * 2]; int outputStart = encoded.length; for (int inputStart = zeros; inputStart < input.length; ) { encoded[--outputStart] = ALPHABET[divmod(input, inputStart, 256, 58)]; if (input[inputStart] == 0) { ++inputStart; } } while (outputStart < encoded.length && encoded[outputStart] == ENCODED_ZERO) { ++outputStart; } while (--zeros >= 0) { encoded[--outputStart] = ENCODED_ZERO; } return new String(encoded, outputStart, encoded.length - outputStart); }  static String encodeWithCheckSum(byte[] keyData); static String encode(byte[] input); static @Nullable byte[] decode(@NotNull String input);  }### Answer:
@Test public void encode() throws Exception { Random random = new Random(); for (int i = 1; i < 100; i++) { byte[] bytes = new byte[i]; random.nextBytes(bytes); String data = Base58.encode(bytes); byte[] decode = Base58.decode(data); assertTrue(ByteUtils.equals(bytes, decode)); } }