md5算法
第一种
import org.springframework.util.DigestUtils;
public class StringUtilTest { static final String TARGET = "changeme"; /* * 不可逆算法 MD5 */ @Test public void Md5() { String str = DigestUtils.md5DigestAsHex(TARGET.getBytes()); System.out.println("md5Hex: "+str); } }
结果:
md5Hex: 4cb9c8a8048fd02294477fcb1a41191a
第二种
import java.security.MessageDigest;
@Test public void test() { try { String password = "12345psw"; //MD5表示加密算法,可以选择其他参数,如SHA-1等 MessageDigest digest = MessageDigest.getInstance("MD5"); //先调用update,再调动digest digest.update(password.getBytes()); byte[] byteResult = digest.digest(); //因为加密完为字节数组,需要转化为字符串 String result = convertbyte2String(byteResult); System.out.println(result); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } //将字节数组转化为字符串 private String convertbyte2String(byte[] byteResult) { char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' }; //4位代表一个16进制,所以长度需要变为原来2倍 char[] result = new char[byteResult.length*2]; int index = 0; for(byte b:byteResult) { //先转换高4位 result[index++] = hexDigits[(b>>>4)& 0xf]; result[index++] = hexDigits[b& 0xf]; } return new String(result); }
第三种commons-codec
public class UtilTest { static final String TARGET = "中文123abc,./"; /* * 不可逆算法 MD5 */ @Test public void Md5() { String str = DigestUtils.md5Hex(TARGET); System.out.println("md5Hex: "+str); } /* * 不可逆算法 SHA1 */ @Test public void Sha1() { String str = DigestUtils.shaHex(TARGET); print("shaHex: "+str); str = DigestUtils.sha256Hex(TARGET); print("sha256Hex: "+str); str = DigestUtils.sha384Hex(TARGET); print("sha384Hex: "+str); str = DigestUtils.sha512Hex(TARGET); print("sha512Hex: "+str); } /* * 可逆算法 BASE64 */ @Test public void Base64() { //加密 byte[] b = Base64.encodeBase64(TARGET.getBytes(), true); String str = new String(b); print("BASE64: "+str); //解密 byte[] b1 = Base64.decodeBase64(str); print("解密之后内容为: "+new String(b1)); } public void print(Object obj) { System.out.println(obj); } }
结果:
原始字符串为:中文123abc,./
MD5加密为:9ba58cffe5815ea9f365b86a3f473ad5
Sha1加密为:ec2f9a1f8f601dd5e6889d65204a7a998a0aa389
Base64加密为:5Lit5paHMTIzYWJjLC4v
Base64解密为:中文123abc,./
例子:
public static void main(String[] args) { String str = DigestUtils.md5DigestAsHex("123qwe".getBytes()); System.out.println("str: "+str); MessageDigest md = null; String str1 = ""; try { md = MessageDigest.getInstance("MD5"); str1 = toHex(md.digest("123qwe".getBytes("UTF-8"))); System.out.println("str1: "+str1); }catch(Exception e){ e.printStackTrace(); } } public static String toHex(byte input[]){ StringBuffer output = new StringBuffer(input.length * 2); for(int i = 0; i < input.length; i++){ int current = input[i] & 0xff; if(current < 16) output.append("0"); output.append(Integer.toString(current, 16)); } return output.toString(); }
结果:
str: 46f94c8de14fb36680850768ff1b7f2a
str1: 46f94c8de14fb36680850768ff1b7f2a