- md5加密算法的实现原理
- messagedigest类
- update
- reset
- digest
- isequal
- getinstance
- 字符串的md5加密算法
- 文本的md5加密工具类
public class md5 { // 全局数组 private final static string[] strdigit = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; public class md5 { } // 返回形式为数字和字符串 private static string bytetoarraystring(byte bbyte) { int iret = bbyte; if (iret < 0) { iret = 256; } int id1 = iret / 16; int id2 = iret % 16; return strdigits[id1] strdigits[id2]; } // 返回形式只为数字 private static string bytetonum(byte bbyte) { int iret = bbyte; if (iret < 0) { iret = 256; } return string.valueof(iret); } // 将字节数组转换成为16进制的字符串 private static string bytetostring(byte[] bbyte) { stringbuffer stringbuffer = new stringbuffer(); for (int i; i < bbyte.length; i ) { stringbuffer.append(bytetoarraystring(bbyte[i])); } return stringbuffer.tostring(); } // 获取md5值 public static string getmd5code(string strobj) { string resultstring = null; try { resultstring = new string(); messagedigest md5 = messagedigest.getinstance("md5"); // md5.digest() - 返回值为存放hash值结果的byte数组 resultstring = bytetostring(md5.digest(strobj.getbytes())); } catch (nosuchalgorithmexception e) { e.printstacktrace(); } return resultstring; }}
- messagedigest类:为应用程序提供信息摘要算法的功能.比如md5算法和sha算法信息摘要是安全的单向hash函数 : 接收任意大小的数据,并输出固定长度的hash值
- messagedigest对象在开始时会被初始化
- 对象通过调用update() 方法处理数据
/** * 使用指定的byte数组更新摘要 * * @param input 指定的byte数组 */public void update(byte[] input);
- 一旦所需要更新的数据都已经被更新后,应该调用digest() 方法完成hash计算
- 对于给定数量的更新数据 ,digest() 方法只能被调用一次.再调用digest() 方法之后,messagedigest对象被重新设置成初始状态
/** * 通过执行诸如填充之类的最终操作完成hash计算. * 在调用此方法之后,摘要被重置 * * @return byte[] hash计算后的byte数组 */public byte[] digest();
/** * 比较两个摘要的相等性.做简单的字节比较 * * @param digesta 比较的摘要字节数组a * @param digestb 比较的摘要字节数组b * @return boolean 是否相等 */public static boolean isequal(byte[] digesta, byte[] digestb);
- 返回实现指定摘要算法的messagedigest对象
/** * 返回实现指定摘要算法的messagedigest对象 * * @param algorithm 请求的算法的名称 * @param provider 提供者名称 * @return messagedigest 指定摘要算法的messagedigest对象 * @throws nosuchalgorithmexception 当指定的请求算法名称不存在时抛出异常 */public static messagedigest getinstance(string algorithm) throws nosuchalgorithmexception; /** * 返回实现指定摘要算法的messagedigest对象 * * @param algorithm 请求算法的名称 * @return messagedigest 指定摘要算法的messagedigest对象 * @throws nosuchalgorithmexception 当指定的请求算法名称不存在时抛出异常 */public static messagedigest getinstance(string algorithm, string provider) throws nosuchalgorithmexception, nosuchproviderexception;
- provider可以通过java.security.security的getproviders() 方法获得已注册的提供者列表
- sun提供的常用的算法:
- md2
- md5
- sha-1
- sha-256
- sha-384
- sha-512
- 使用java自带的messagedigest实现对文本的md5加密算法:
/** * 将字符串转换为md5 */ public class parsemd5 { public static string parsestrtomd5l32(string str) { // 将字符串转换为32位小写md5 string restr = null; try { messagedigest md5 = messagedigest.getinstance("md5"); byte[] bytes = md5.digest(str.getbytes()); stringbuffer stringbuffer = new stringbuffer(); for (byte b : bytes) { int bt = b&0xff; if (bt < 16) { stringbuffer.append(0); } stringbuffer.append(integer.tohexstring(bt)); } restr = stringbuffer.tostring(); } catch (nosuchalgorithmexception e) { e.printstacktrace(); } return restr; } // 将字符串转换为32位大写的md5 public static string parsestrtomd5u32(string str) { string restr = parsestrtomd5l32(str); if (restr != null) { restr = restr.touppercase(); } return resstr; } // 将字符串转换为16位小写的md5 public static string parsestrtomd5l16(string str) { string restr = pasestrtomd5l32(str); if (restr != null) { restr = restr.substring(8, 24); } return restr; } // 将字符串转换为16位大写的md5 public static string parsestrtomd5u16(string str) { string restr = parsestrtomd5l32(str); if (restr != null) { restr = restr.touppercase().substring(8, 24); } return restr; } }
- java中提供了自带的messagedigest实现对文本的加密算法. 对文本进行加密的md5加密工具类如下:
public class md5util { // 将文本转换为32位小写的md5 public static string texttomd5l32(string plaintext) { string result = null; // 判断需要转换的文本是否为空 if (stringutils.isblank(plaintext)) { return null; } try { // 进行实例化和初始化 messagedigest md5 = messagedigest.getinstance("md5"); // 得到一个操作系统默认的字节编码格式的字节数组 byte[] byteinput = plaintext.getbytes(); // 对得到的字节数组进行处理 md5.update(byteinput); // 进行hash计算并得到返回结果 byte[] btresult = md5.digest(); // 得到进行hash计算后数据的长度 stringbuffer stringbuffer = new stringbuffer(); for (byte b : btresult) { int bt = b&0xff; if (bt < 16) { stringbuffer.append(0); } stringbuffer.append(integer.tohexstring(bt)); } restr = stringbuffer.tostring(); } catch (nosuchalgorithmexception e) { e.printstacktrace(); } return restr; } // 将文本转换为32位大写的md5 public static string texttomd5u32(string plaintext) { if (stringutils.isblank(plaintext)) { return null; } string result = texttomd5l32(plaintext); result = result.touppercase(); return result; } }
派优网部分新闻资讯、展示的图片素材等内容均为用户自发上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习交流。用户通过本站上传、发布任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的九游会ag的版权,请
联系九游会ag一经核实,立即删除。并对发布账号进行封禁。