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

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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