how to convert hex to base64

后端 未结 5 1211
天涯浪人
天涯浪人 2020-12-01 14:55

how to convert hex string into base64 ? I found this page http://home2.paulschou.net/tools/xlate/ but I need some function in java: String base64 = ...decoder(String h

相关标签:
5条回答
  • 2020-12-01 15:03

    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);
    
    0 讨论(0)
  • 2020-12-01 15:07

    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! */
    
    0 讨论(0)
  • 2020-12-01 15:08

    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));
        }
    
    }
    
    0 讨论(0)
  • 2020-12-01 15:10

    Apache Commons Library

    Javadoc:
    http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
    http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html

    Download: http://commons.apache.org/codec/download_codec.cgi

    0 讨论(0)
  • 2020-12-01 15:12

    At first you have to import the Apache Commons Codec library! https://commons.apache.org/proper/commons-codec/archives/1.9/index.html

    Here is the API for 1.9 version http://commons.apache.org/proper/commons-codec/archives/1.9/apidocs/index.html

    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);
    
    0 讨论(0)
提交回复
热议问题