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; } }
/** * 使用指定的byte数组更新摘要 * * @param input 指定的byte数组 */ public void update(byte[] input);
/** * 通过执行诸如填充之类的最终操作完成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对象 * * @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提供的常用的算法:MD2MD5SHA-1SHA-256SHA-384SHA-512/** * 将字符串转换为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; } }
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; } } www.gj *** g.com
微软周六晚间警告说,它在乌克兰的几十个政府和私人计算机网络中检测到一种极具破坏性的恶意软件,似乎在等待着一种未知行为的触发。该公司在一篇博文中说,周四,大约在乌克兰政府机构发现其网站被破坏的同一时间,监视微软全球网络的调查人员发现了该代码。微软说:”这些系统横跨多个政府、非营利组织和信息技术组织,都...
据The Verge报道,Facebook的母公司Meta已经提醒5万名Facebook和Instagram的用户,他们的账户被全球各地的商业“雇佣监视”计划所监视。根据Meta公司周四在新闻页面上发布的最新消息,这些用户是七个实体的目标,分布在100多个国家。 该帖子说,目标包括记者、持不同政见...
一个流传了6个月的骗局已经发展到影响iOS用户。黑客利用社交媒体、约会应用程序、加密货币和滥用苹果公司企业开发者计划,从毫无戒心的受害者那里盗取了至少140万美元。 名为CryptoRom欺诈的实施相当直接,在通过社交媒体或现有数据应用程序获得受害者的信任后,用户被愚弄安装一个修改版的加密货币交易所...
数日前,微软发布了年度《Digital Defense Report》,指出对政府最大的数字威胁主要来自俄罗斯、朝鲜、伊朗等国家。今天,这家科技巨头再次发布了一份咨询报告,称多家参与国防的美国公司正被一个与伊朗有关的威胁行为者盯上。 图片来自于微软 微软发现的最新恶意活动集群目前被称为 DEV-0...
位于德国的IT安全研究机构AV-TEST发布了针对Windows 10家庭用户的2021年10月最佳反病毒程序评估报告。在这份报告中,该组织评测了来自不同公司的21个不同的反恶意软件程序,测试中还包括微软的Windows Defender。 结果,Windows Defender在这次评估中获得了非...
上周,MSPU 报道了戴尔远程 BIOS 更新软件正存在的一个漏洞,或导致多达 129 款不同型号的电脑遭遇中间人攻击。Eclypsium 研究人员解释称,该漏洞使得远程攻击者能够执行多款戴尔笔记本电脑的 BIOS 代码,进而控制设备的启动过程、并打破操作系统和更高层级的安全机制。 此外 Ecly...