1.使用Spring的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
缺点为:只提供了MD5的加密算法
2.使用commons-codec.jar
public class UtilTest {
static final String TARGET = "changeme";
/*
* 不可逆算法 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);
}
}
3.java 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);
}
常见的加密和解密算法—MD5
一、MD5加密概述
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5 是非对称的加密算法(PS:对称加密就是加密用的密码和解密用的密码是一样的,非对称就是加密和解密用的密钥不一样)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
引入
1、常见的加密和解密算法—MD5
2、常见的加密和解密算法—BASE64
3、常见的加密和解密算法—DES
4、常见的加密和解密算法—AES