java消息摘要算法加密
来源:互联网 发布:冒险岛2乐谱数据 编辑:程序博客网 时间:2024/05/21 11:09
1.几种消息摘要算法简介
- md(Message Digest) (md2,md4,md5) 128位
- sha(Secure Hash Algorithm)(sha1,sha2)
- mac(Message Authentication Code) 融合md,mac,含有秘钥
验证数据的完整性
数字签名核心算法
2.应用场景
md可以用于用户登录密码的加密
sha应用
- 加入约定key
- 增加时间戳
- 排序
http://**?msg=12Hasd74mh×tamp=1309488734
对msg,key,timestamp排序拼接,然后sha加密
例如,微信公众账号开发开始时的验证
3.实现代码
md算法
public static void jdkmd() { try { MessageDigest md = MessageDigest.getInstance("md2"); byte[] encodeBytes = md.digest(str.getBytes()); System.out.println(Hex.encodeHexString(encodeBytes)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void ccmd() { byte[] encodeBytes = DigestUtils.md5(str.getBytes()); System.out.println(Hex.encodeHexString(encodeBytes)); } public static void bcmd() { Digest dt = new MD5Digest(); dt.update(str.getBytes(), 0, str.getBytes().length); byte[] md5Bytes = new byte[dt.getDigestSize()]; dt.doFinal(md5Bytes, 0); System.out.println("bcmd5:"+org.bouncycastle.util.encoders.Hex.toHexString(md5Bytes));// try {// MessageDigest md = org.bouncycastle.jcajce.provider.digest.MD5.Digest.getInstance("md5");// byte[] encodeBytes = md.digest(str.getBytes());// System.out.println(org.bouncycastle.util.encoders.Hex.toHexString(encodeBytes));// // } catch (NoSuchAlgorithmException e) {// // TODO Auto-generated catch block// e.printStackTrace();// } } public static void bcmd4() { Security.addProvider(new BouncyCastleProvider()); try { MessageDigest md = MessageDigest.getInstance("MD4"); byte[] encodeByte = md.digest(str.getBytes()); System.out.println("bcmd4:"+org.bouncycastle.util.encoders.Hex.toHexString(encodeByte)); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
sha算法代码实现
public static void jdksha() { try { MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] encodeBytes = sha.digest(str.getBytes()); System.out.println("jdksha1:"+Hex.encodeHexString(encodeBytes)); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void bcsha() { Digest dt = new SHA224Digest(); dt.update(str.getBytes(),0,str.getBytes().length); byte[] sha224Bytes = new byte[dt.getDigestSize()]; dt.doFinal(sha224Bytes, 0); System.out.println("bcsha224:"+org.bouncycastle.util.encoders.Hex.toHexString(sha224Bytes)); System.out.println(); }
md和sha的代码实现几乎差不多,二者可以互相借鉴。
mac算法代码实现
public static void jdkHmacMd5() { try { KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//初始化KeyGenerator //随机产生秘钥 SecretKey secertKey = keyGenerator.generateKey(); //产生秘钥 byte[] key = secertKey.getEncoded(); //产生指定秘钥 key = new byte[]{'a','a','a','a','a','a','a','a','a','a'};//Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a','a','a'}); secertKey = new SecretKeySpec(key,"HmacMD5"); Mac mac = Mac.getInstance(secertKey.getAlgorithm());//实例化Mac mac.init(secertKey);//初始化Mac byte[] encodeByte = mac.doFinal(str.getBytes()); //执行摘要 System.out.println("jdkHmacMd5:"+Hex.encodeHexString(encodeByte)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void bcHmacMd5() { HMac hmac = new HMac(new MD5Digest()); hmac.init(new KeyParameter(new byte[]{'a','a','a','a','a','a','a','a','a','a'})); hmac.update(str.getBytes(), 0, str.getBytes().length); byte[] hmacMd5Bytes = new byte[hmac.getMacSize()]; hmac.doFinal(hmacMd5Bytes, 0); System.out.println("bcHmacMd5:"+org.bouncycastle.util.encoders.Hex.toHexString(hmacMd5Bytes)); }
0 0
- java消息摘要算法加密
- java消息摘要算法加密
- java消息摘要算法加密
- Java消息摘要算法加密
- Java加密-Base64、消息摘要算法
- java 加密之消息摘要算法
- 消息摘要算法加密
- Java加密系列之(三)消息摘要算法加密
- java加密解密研究5、消息摘要算法简介
- java加密解密研究9、其他消息摘要算法
- Java加密与解密的艺术-消息摘要算法
- JAVA加密解密之消息摘要算法(MessageDigest)
- Java加密与解密学习记录03-消息摘要算法
- 单向加密——JAVA消息摘要算法使用
- Java消息摘要算法
- 消息摘要算法加密(代码实现)
- Java MD5消息摘要算法
- Java加密和数字签名 1消息摘要
- 插入排序
- (4.2.11.1)【android开源组件】Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- 如何让listview滚动到底部
- 手机客户端测试总结
- android 震动效果
- java消息摘要算法加密
- 微软警告:Windows PC也存在Freak安全漏洞
- C++和Java继承关系中方法覆盖的不同
- 教你写Android ImageLoader框架之图片加载与加载策略
- 让那些做面试官的屌丝lead不再抖脚系列(一)---同步异步探讨->进程和线程
- (4.2.11.2)【android开源组件】Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- Web系统大规模并发——电商秒杀与抢购
- msvcp110d.dll丢失的问题
- 空指针异常可能出现的原因