How to Convert Hex to Base64

how to convert hex string into base64 ? I found this page but I need some function in java: String base64 = ...decoder(String hex); I found something in the Internet but they are to difficult and use byte array. I am looking for something simplier thx a lot

1

6 Answers

Have a look at Commons Codec :

 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Hex;

byte[] decodedHex = Hex.decodeHex(hex);
byte[] encodedHexB64 = Base64.encodeBase64(decodedHex);

You are not likely to find something that converts directly from hex to base-64. You'll need to find or write a hex decoder and a base-64 encoder, and use a byte[] as an intermediate form.

Compare reality with what you are asking for:

String b64 = encoder.encode(decoder.decode(hex)); /* Too difficult :( !!! */

versus

String b64 = transcoder.transcode(hex);           /* So much simpler! */

You might want to check out this code. I found it on google

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import sun.misc.BASE64Encoder;

public class MD5 {

    static char[] carr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    public static String getBase64FromHEX(String input) {

        byte barr[] = new byte[16];
        int bcnt = 0;
        for (int i = 0; i < 32; i += 2) {
            char c1 = input.charAt(i);
            char c2 = input.charAt(i + 1);
            int i1 = intFromChar(c1);
            int i2 = intFromChar(c2);

            barr[bcnt] = 0;
            barr[bcnt] |= (byte) ((i1 & 0x0F) << 4);
            barr[bcnt] |= (byte) (i2 & 0x0F);
            bcnt++;
        }

        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(barr);
    }

    public static synchronized String getMD5_Base64(String input) {
        // please note that we dont use digest, because if we
        // cannot get digest, then the second time we have to call it
        // again, which will fail again
        MessageDigest digest = null;

        try {
            digest = MessageDigest.getInstance("MD5");
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        if (digest == null)
            return input;

        // now everything is ok, go ahead
        try {
            digest.update(input.getBytes("UTF-8"));
        } catch (java.io.UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
        byte[] rawData = digest.digest();
        BASE64Encoder bencoder = new BASE64Encoder();
        return bencoder.encode(rawData);
    }

    private static int intFromChar(char c) {
        char clower = Character.toLowerCase(c);
        for (int i = 0; i < carr.length; i++) {
            if (clower == carr[i]) {
                return i;
            }
        }

        return 0;
    }

    public static void main(String[] args) {

        //String password = args[0];
        String password = "test";

        MessageDigest digest = null;

        try {
            digest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        try {
            digest.update(password.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }

        byte[] rawData = digest.digest();
        StringBuffer printable = new StringBuffer();

        for (int i = 0; i < rawData.length; i++) {
            printable.append(carr[((rawData[i] & 0xF0) >> 4)]);
            printable.append(carr[(rawData[i] & 0x0F)]);
        }
        String phpbbPassword = printable.toString();

        System.out.println("PHPBB           : " + phpbbPassword);
        System.out.println("MVNFORUM        : " + getMD5_Base64(password));
        System.out.println("PHPBB->MVNFORUM : " + getBase64FromHEX(phpbbPassword));
    }

}

At first you have to import the Apache Commons Codec library!

Here is the API for 1.9 version

Then you have to follow these 3 steps

       //convert String to char array (1st step)
      char[] charArray = myhexString.toCharArray();

      // decode the char array to byte[] (2nd step)
      byte[] decodedHex = Hex.decodeHex(charArray);

    // The String decoded to Base64 (3rd step)
    String result= Base64.encodeBase64String(decodedHex);

Apache Commons Library

Javadoc:

Download:

My implementation in Scala

import java.math.BigInteger
import org.apache.commons.codec.digest.MessageDigestAlgorithms
import org.apache.commons.codec.digest.DigestUtils
import org.apache.commons.codec.binary.Base64

object HashBase64 {

  import MessageDigestAlgorithms._

  def main(args: Array[String]): Unit = {
    println(hash64("my-value")) // print("CCipycIAdVxRK2IG2tFHow==")
  }

  protected def hash64(input: String) = {
    val hashBase16 = new DigestUtils(MD5).digestAsHex(input) // some hex string
    val base10 = new BigInteger(hashBase16, 16) // base 10 int
    val base64 = new String(Base64.encodeInteger(base10)) // base64 string
    base64
  }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest