[英]how to convert hex to base64
how to convert hex string into base64 ?如何将十六进制字符串转换为base64? I found this page http://home2.paulschou.net/tools/xlate/ but I need some function in java: String base64 = ...decoder(String hex);
我找到了这个页面http://home2.paulschou.net/tools/xlate/但我需要一些 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我正在寻找更简单的东西
Have a look at Commons Codec : 看看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);
At first you have to import the Apache Commons Codec library! 首先,您必须导入Apache Commons Codec库! https://commons.apache.org/proper/commons-codec/archives/1.9/index.html 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 以下是1.9版本的API http://commons.apache.org/proper/commons-codec/archives/1.9/apidocs/index.html
Then you have to follow these 3 steps 然后你必须遵循这3个步骤
//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);
You are not likely to find something that converts directly from hex to base-64. 您不太可能找到直接从十六进制转换为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. 您需要找到或写入十六进制解码器和base-64编码器,并使用byte[]
作为中间形式。
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));
}
}
My implementation in Scala我在 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
}
}
Apache Commons Library Apache Commons Library
Javadoc: 的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/Base64.html
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html
Download: http://commons.apache.org/codec/download_codec.cgi 下载: http : //commons.apache.org/codec/download_codec.cgi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.