方案一:
/** * 1.对文本进行32位小写MD5加密 * @param plainText 要进行加密的文本 * @return 加密后的内容 */ public static String textToMD5L32(String plainText){ String result = null; //首先判断是否为空 try{ MessageDigest md = MessageDigest.getInstance("MD5"); //首先进行实例化和初始化 byte[] btInput = plainText.getBytes(); //得到一个操作系统默认的字节编码格式的字节数组 md.update(btInput); //对得到的字节数组进行处理 byte[] btResult = md.digest(); //进行哈希计算并返回结果 StringBuffer sb = new StringBuffer(); //进行哈希计算后得到的数据的长度 for(byte b : btResult){ int bt = b&0xff; if(bt<16){ sb.append(0); } sb.append(Integer.toHexString(bt)); } result = sb.toString(); }catch(NoSuchAlgorithmException e){ e.printStackTrace(); } return result; }
方案二:
public static String getMD5(String source) { String s = null; char hexChar[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(source.getBytes());// 使用指定的byte数组更新摘要 byte[] hashCalc = md.digest();// 完成哈希计算 char result[] = new char[16 * 2];// MD5结果返回的是32位字符串,每位是16进制表示的 int k = 0; for (int i = 0; i < 16; i++) {// 循环16次,对每个字节进行操作转换 byte everyByte = hashCalc[i]; result[k++] = hexChar[everyByte >>> 4 & 0xf];// 对每个字节的高4位进行处理,逻辑右移,再相与 result[k++] = hexChar[everyByte & 0xf];// 低4位转换 } s = new String(result); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return s; } public static void main(String[] args) { System.out.println(getMD5("a")); }