在写demo之前先介绍几个概念,对我来讲,在代码之前了解清楚概念可能对后面的代码会有一个更深入的理解.
md5概念
即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4.
MessageDigest类
MessageDigest类为应用程序提供消息摘要算法的功能,例如SHA-1或SHA-256。消息摘要是获取任意大小的数据并输出固定长度的散列值的安全单向散列函数。
一个MessageDigest对象开始初始化。数据是使用通过其处理update 方法。在任何点reset可以被称为重置摘要。一旦要更新的所有数据已被更新,digest方法应该被调用来完成哈希计算。该digest方法可以一次更新的给定数量的被调用。之后digest被调用,MessageDigest对象被复位为初始化的状态。
Java平台的每一个执行需要支持以下标准MessageDigest算法:
- MD5
- SHA-1
- SHA-256
- 构造函数
- protected MessageDigest(String algorithm)
创建具有指定算法名称的消息摘要。
方法
- Object clone() 如果实现是可克隆的,则返回一个克隆。
- byte[] digest(byte[] input) 使用指定的字节数对摘要执行最后更新,然后完成摘要计算。
- String getAlgorithm() 返回标识算法的字符串,与实现详细信息无关。
- int getDigestLength() 返回摘要的长度(以字节为单位),如果此操作不受提供程序支持并且实现不可克隆,则返回0。
- static MessageDigest getInstance(String algorithm) 返回实现指定摘要算法的MessageDigest对象。
- Provider getProvider() 返回此消息摘要对象的提供程序。
- static boolean isEqual(byte[] digesta, byte[] digestb) 比较两个摘要的平等性。
- void reset() 重置摘要以供进一步使用。
- String toString() 返回此消息摘要对象的字符串表示形式。
- void update(byte[] input) 使用指定的字节数更新摘要。
BASE64Encoder类
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息.
sun.misc.BASE64Encoder 是base64编码工具.该类是sun公司的内部方法,用时需要eclipse/myeclipse中Build Path.
特别要注意:此类不是jdk中自带的,要build path.
Demo
/**
* md5加密
* @param password 待加密密码
* @return 返回加密后的字符串
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static String md5(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{
//得到一个信息摘要器
MessageDigest md5 = MessageDigest.getInstance("MD5");
//获取Base64编码算法工具
BASE64Encoder base64 = new BASE64Encoder();
//进行编码加密
String encode = base64.encode(md5.digest(password.getBytes("UTF-8")));
return encode;
}