您的位置:首页 > 编程语言 > Java开发

ddpush 学习之路 3 StringUtil.java

2015-03-17 00:29 405 查看
我们来看ddpush的第二个类。这次也是选择一个工具类来解析。我们先尽量把边缘的工具类、Bean、这些边缘的东西研究一遍。然后再看核心的一些类。尽量确保我们看核心类的时候。核心类里涉及到的一些其他类、函数 我们都已经研究过了。这样。在我们看核心类的时候。才能比较容易明白核心类得操作结果。

好了下面来看第ddpush的二个类。StringUtil.java 同样的。先上类代码以及注释。然后是具体的使用以及结果的展示。

public class StringUtil {
/**
* 检测传入的String类型参数是否为 null
* 如果传入的参数为null就返回 ""(空字符串)
* 否则就返回参数本身
* 作用:防止字符串出现 空指针 异常
* */
public static String checkBlankString(String param) {
if (param == null) {
return "";
}
return param;
}

/**
* MD5加密
* */
public static String md5(String encryptStr) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(encryptStr.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuffer md5 = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
md5.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16));
md5.append(Character.forDigit((digest[i] & 0xF), 16));
}

encryptStr = md5.toString();
return encryptStr;
}

/**
* SHA1加密
* */
public static String sha1(String encryptStr) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(encryptStr.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuffer sha1 = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
sha1.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16));
sha1.append(Character.forDigit((digest[i] & 0xF), 16));
}

encryptStr = sha1.toString();
return encryptStr;
}

/**
* md5加密字符串。返回加密后的byte[]
* */
public static byte[] md5Byte(String encryptStr) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(encryptStr.getBytes("UTF-8"));
return md.digest();
}

/**
* SHA1加密字符串。返回加密后的byte[]
* */
public static byte[] sha1Byte(String encryptStr) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(encryptStr.getBytes("UTF-8"));
return md.digest();
}

/**
* 获得UUID(使用JDK生成的UIID) 并将系统生成的默认的UUID中间的 “-” 去掉 并返回这个处理过的UUID
* */
public static String genUUIDHexString(){
return UUID.randomUUID().toString().replaceAll("-", "");
}

/**
* 将16进制字符串解析成 UUID 并返回
* */
public static UUID parseUUIDFromHexString(String hexUUID) throws Exception{
byte[] data = hexStringToByteArray(hexUUID);
long msb = 0;
long lsb = 0;

for (int i=0; i<8; i++)
msb = (msb << 8) | (data[i] & 0xff);
for (int i=8; i<16; i++)
lsb = (lsb << 8) | (data[i] & 0xff);

return new java.util.UUID(msb,lsb);
}

/**
* 将传入的值转换成 16 进制数字 并返回
* */
private static char convertDigit(int value) {

value &= 0x0f;
if (value >= 10)
return ((char) (value - 10 + 'a'));
else
return ((char) (value + '0'));

}

/**
* 将一个16进制字符串转换成字节数组 并返回
* */
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}

/**
* 将字节数组转换成一个可打印的格式包含一个十六进制数字字符的字符串(两个字节)
* */
public static String convert(final byte bytes[]) {

StringBuffer sb = new StringBuffer(bytes.length * 2);
for (int i = 0; i < bytes.length; i++) {
sb.append(convertDigit((int) (bytes[i] >> 4)));
sb.append(convertDigit((int) (bytes[i] & 0x0f)));
}
return (sb.toString());

}

/**
* 将字节数组的 一部分 转换成一个可打印的格式包含一个十六进制数字字符的字符串(两个字节)
* */
public static String convert(final byte bytes[],int pos, int len) {

StringBuffer sb = new StringBuffer(len * 2);
for (int i = pos; i < pos+len; i++) {
sb.append(convertDigit((int) (bytes[i] >> 4)));
sb.append(convertDigit((int) (bytes[i] & 0x0f)));
}
return (sb.toString());

}
}


以上就是我对这个 StringUtil.java 这个工具类的理解以及添加的注释。这个类大概的作用有 获取UUID、 UUID的解析、 MD5 加密、 SHA1 加密、10进制16进制的转换、16进制字符串和byte[]数组之间的转换。

这个类也就这些东西。关于加密、UUID之类的。就再这个类里面。

好了。下面我们来看看这个类的基本使用。

try {
//MD5加密字符串
String brok1nMd5 = md5("brok1n");
//SHA1加密字符串
String brok1nSha1 = sha1("brok1n");
//MD5 byte[]
byte[] baseMd5 = md5Byte("brok1n");
System.out.println("brok1n md5:" + brok1nMd5);
System.out.println("brok1n sha1:" + brok1nSha1);
System.out.println(convert(baseMd5));

//获取UUID
System.out.println("UUID:" + genUUIDHexString());

//获取UUID
String uuidstr = genUUIDHexString();
//用parseUUIDFormHexString(String hexStr) 将 上面获取的 uuid 转换成 UUID 对象
UUID uid = parseUUIDFromHexString(uuidstr);
System.out.println("----------");
System.out.println("原始UUID \t\t\t\t:" + uuidstr);
System.out.println("parseUUIDFormHexString之后的UUID\t\t:" + uid.toString());
System.out.println("parseUUIDFormHexString之后的UUID去除 “-” \t:" + uid.toString().replace("-", ""));
System.out.println("---------");

//将byte[]数组 转换成 16进制字符串
String convertResult = convert(md5Byte("123456"));
System.out.println("123456 convert之后的字符串:" + convertResult);

//将16进制字符串转换成 byte[]
byte[] bta = hexStringToByteArray(md5("123456"));
//将 byte[] 数组 转换成 16进制字符串
String sbat = convert(bta);
System.out.println("16进制转换后的字符串:" + sbat);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


结果为



经过上面的理解注释和简单的运用。大概明白了这个类的基本作用。UUID MD5 SHA1 进制转换

好了。这就是解析 ddpush 的第二个工具类 StringUtil.java

by brok1n 20150316
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ddpush MD5 SHA1