您的位置:首页 > 移动开发 > Android开发

android:MD5 32位16位小写加密

2014-07-23 17:33 531 查看


转自:android:MD5 32位16位小写加密 - 2711082222的日志 - 网易博客
http://2711082222.blog.163.com/blog/static/106302249201226115333266/

android:MD5 32位16位小写加密


2012-03-06 14:04:56| 分类: Android笔记|举报|字号 订阅

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA



/**

* MD5 32位加密方法一 小写

* @param str

* @return

*/

public final static String get32MD5(String s) {

char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

try {

byte[] strTemp = s.getBytes();

//使用MD5创建MessageDigest对象

MessageDigest mdTemp = MessageDigest.getInstance("MD5");

mdTemp.update(strTemp);

byte[] md = mdTemp.digest();

int j = md.length;

char str[] = new char[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte b = md[i];

//System.out.println((int)b);

//将没个数(int)b进行双字节加密

str[k++] = hexDigits[b >> 4 & 0xf];

str[k++] = hexDigits[b & 0xf];

}

return new String(str);

} catch (Exception e) {

return null;

}

}

/**

* MD5 32位加密方法二 小写

* @param str

* @return

*/

public final static String get32MD5Str(String str) {

MessageDigest messageDigest = null;

try {

messageDigest = MessageDigest.getInstance("MD5");

messageDigest.reset();

messageDigest.update(str.getBytes("UTF-8"));

} catch (NoSuchAlgorithmException e) {

System.out.println("NoSuchAlgorithmException caught!");

System.exit(-1);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

byte[] byteArray = messageDigest.digest();

StringBuffer md5StrBuff = new StringBuffer();

for (int i = 0; i < byteArray.length; i++) {

if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)

md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));

else

md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));

}

return md5StrBuff.toString();

}

/**

* Md5 32位 or 16位 加密

* @param plainText

* @return 32位加密

*/

public static String Md5(String plainText ) {

StringBuffer buf = null;

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(plainText.getBytes());

byte b[] = md.digest();

int i;

buf = new StringBuffer("");

for (int offset = 0; offset < b.length; offset++) {

i = b[offset];

if(i<0) i+= 256;

if(i<16)

buf.append("0");

buf.append(Integer.toHexString(i));

}

// Log.e("555","result: " + buf.toString());//32位的加密

//Log.e("555","result: " + buf.toString().substring(8,24));//16位的加密

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return buf.toString();

}

附:java String 转化成 MD5 byte[]

public static byte[] hexStringToByte(String hex) {

int len = (hex.length() / 2);

byte[] result = new byte[len];

char[] achar = hex.toCharArray();

for (int i = 0; i < len; i++) {

int pos = i * 2;

result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));

}

return result;

}

private static byte toByte(char c)

{

byte b = (byte) "0123456789abcdef".indexOf(c);

return b;

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