消息摘要算法是为了验证数据的完整性。通过摘要算法可以获得对应的唯一的“消息摘要”或“数字指纹”,但不能通过该“消息摘要”反推出原始值。
3大消息摘要算法:
MD算法:MD2、MD4、MD5
SHA算法:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512
MAC算法:HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512
- MD5算法
采用commons-codec实现,代码如下
/** * MD5消息摘要 * @param data * @return */ public static String MD5encode(String data) { return DigestUtils.md5Hex(data); }
测试代码
String data = "yeliang"; System.out.println("原文:"+data); String md5 = MD5encode(data); System.out.println("MD5消息摘要:"+md5);
运行结果
原文:yeliang MD5消息摘要:f9dde79b300661be269b0847511dac0c
- SHA1算法
采用commons-codec实现,代码如下
/** * SHA1消息摘要 * @param data * @return */ public static String SHA1encode(String data) { return DigestUtils.sha1Hex(data); }
测试代码
String data = "yeliang"; System.out.println("原文:"+data); String sha1 = SHA1encode(data); System.out.println("SHA1消息摘要:"+sha1);
运行结果
原文:yeliang SHA1消息摘要:f4fdc278cca011e1fbb80811e85816b35c735f35
- HmacMD5
实现代码
/** * 生成HmacMD5算法的密钥 * @return */ public static String HmacMD5KeyGenerate() { try { KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); SecretKey secretKey = keyGenerator.generateKey(); return Hex.encodeHexString(secretKey.getEncoded()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } /** * HmacMD5算法计算MAC * @param key * @param data * @return */ public static String HmacMD5encode(String key, String data) { try { SecretKey secretKey = new SecretKeySpec(Hex.decodeHex(key.toCharArray()), "HmacMD5"); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); byte[] macByte = mac.doFinal(Hex.decodeHex(data.toCharArray())); return Hex.encodeHexString(macByte); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (DecoderException e) { e.printStackTrace(); } return null; }
测试代码
String hmacMD5Key = HmacMD5KeyGenerate(); System.out.println("HmacMD5密钥:"+hmacMD5Key); String hmacMD5 = HmacMD5encode(hmacMD5Key, "404142434445464748494a4b4c4d4f"); System.out.println("HmacMD5生成MAC:"+hmacMD5);
运行结果
HmacMD5密钥:32639241ecd1613c8274dd236fc0005839c34ca17d41797c71ac55a1986fee2779b79901cec7fde91676228a8ffa6ad845d59d97bfcd8a1ff9cc09cfb41f67f2 HmacMD5生成MAC:aaeb13481292f82fe7e5ec6ee7b7bf3a
注意:MAC算法是一种有密钥的消息摘要算法,密钥和数据必须是HexString
- CRC算法
CRC——Cyclic Redundancy Check,循环冗余校验。根据数据产生简短固定位数的一种散列函数,主要用来校验或检测数据传输后出现的错误。
常用件的CRC算法是CRC32算法,循环冗余校验值是32位的二进制,也就是4字节数据。
CRC32算法实现代码
/** * CRC32算法 * @param data * @return */ public static String CRC32code(String data) { CRC32 crc32 = new CRC32(); try { crc32.update(Hex.decodeHex(data.toCharArray())); String hex = Long.toHexString(crc32.getValue()); return hex; } catch (DecoderException e) { e.printStackTrace(); } return null; }
测试代码
String data = "3132333435363738"; String crc32 = CRC32code(data); System.out.println("原文:"+data); System.out.println("CRC-32:"+crc32);
运行结果
原文:3132333435363738 CRC-32:9ae0daaf
相关推荐
NULL 博文链接:https://ye-liang.iteye.com/blog/2002828
此资源包含完整代码和完整实验报告(加上你的学号姓名即可提交)
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对...
Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
“第3篇算法高级应用篇”讲解了算法的一些高级应用技术,包括在密码学和数据压缩/解压缩中的应用。 《C/C++常用算法手册》知识点覆盖全面、结构安排紧凑、讲解详细、示例丰富。《C/C++常用算法手册》对每一个知识点...
java代码-使用java生成一个固定位数的随机字符串,并加密,和用户密码加密后的密文组合的源代码 ——学习参考资料:仅用于个人学习使用!
Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
信息安全的最大特点之一是自主性,因而其核心技术——密码学的研究与开发应当是一种本土性的科学。对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。然而对于安全产品,除非能完全确信它在硬件和软件...
素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。 3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点...
2. 修改密码 说明:修改用户密码一般有两种方式,一种是通过命令password修改,另一种是通过语句alter user实现,如果要修改他人的密码,必须要具有相关的权限才可以 用法: 方式一 password [用户名] 方式二 alert...