这里介绍一下MD5加密:
public class MD5Utils {
// 进行md5的加密运算
public static String encode(String password) {
// MessageDigest专门用于加密的类
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] result = messageDigest.digest(password.getBytes()); // 得到加密后的字符组数
StringBuffer sb = new StringBuffer();
for (byte b : result) {
int num = b & 0xff; // 这里的是为了将原本是byte型的数向上提升为int型,从而使得原本的负数转为了正数
String hex = Integer.toHexString(num); //这里将int型的数直接转换成16进制表示
//16进制可能是为1的长度,这种情况下,需要在前面补0,
if (hex.length() == 1) {
sb.append(0);
}
sb.append(hex);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
MD5的加密实现方式是被谷歌屏蔽起来的,所以这只能想黑盒子测试一样去了解它的作用,那么这里是将传入的字符串转换成16位16进制的字符串从而起到加密的作用,中间对于&0Xff也已经做出了解释。这里顺便记录一下java的基础知识,不用真的还比较容易忘记。
java 8大基本数据类型:
类型 长度(字节为单位,一个字节是8位也就是0000 0000,如果是字就是16位 0000 0000 0000 0000)
boolean–>1
char–>2
byte–>1
short–>2
int–>4
long–>8
float–>4
double–>8
PS:在java中,有一个字符串的操作
public void test3()
{
<span style="text-decoration: underline;">String</span> password = "1203";
byte[] bytes = password.getBytes();
for(byte b: bytes)
{
System.out.println(b);
}
}
需要做出的基本解释,就是这里java会将字符串中的内容转换成字节数组进行输出,规律如下:
- 英文单字 一个对应一个字节
- 数字一般也是一个数字对应一个字节
- 中文的话一般是一个中文对应3个字节来表示。(这里不是非常的明白,为什么一个中文对应3个字节)
转载自:http://www.cnblogs.com/Jacky-Fight/p/3627436.html