啊,有点小注释,懒得介绍了,就贴个代码吧,大意理解就可以了。

 package jdbc.pro.lin;

 import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class MyMessageDigest {
public static final String PLAIN_TEXT = "i m a sample";
public static final String MD_ALGORITHM = "MD5";
public static final String SHA_ALGORITHM = "SHA-512";
public static final String MAC_ALGORITHM = "HmacSHA512"; public static void main(String[] args) {
System.out.println("MD5: " + MD5(PLAIN_TEXT.getBytes()));
System.out.println("SHA-512: " + SHA(PLAIN_TEXT.getBytes()));
System.out.println("HmacSHA512:" + MAC(PLAIN_TEXT.getBytes()));
} /**
* 1.消息摘要算法,MD家族,有MD2 MD4 MD5,其中MD4 JDK不支持
*
* @param plainText
* @return
*/
public static String MD5(byte[] plainText) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance(MD_ALGORITHM);
return Base64.encodeBase64String(messageDigest.digest(plainText));
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null; } /**
* 2.SHA Security Hash Algorithm 安全散列算法,固定长度摘要信息 SHA-1 SHA-2( SHA-224
* SHA-256 SHA-384 SHA-512) 使用的依然是MessageDigest类,JDK不支持224
*
* @param plainText
* @return
*/
public static String SHA(byte[] plainText) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance(SHA_ALGORITHM);
return Base64.encodeBase64String(messageDigest.digest(plainText));
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 3.MAC(Message Authentication Code) 消息认证码算法,是含有密钥散列函数算法。
* 兼容了MD和SHA的特性。
* 加密过程三步走,与后面要介绍的对称加密和非对称加密是相似的
* 1) 传入算法,实例化一个加密器
* 2) 传入密钥,初始化加密器
* 3) 调用doFinal方法进行加密
* @param plainText
* @return
*/
public static String MAC(byte[] plainText) { try {
byte[] secretBytes = generatorMACSecretKey();
SecretKey key = restoreMACSecretKey(secretBytes);
Mac mac = Mac.getInstance(MAC_ALGORITHM);
mac.init(key);
return Base64.encodeBase64String(mac.doFinal(plainText));
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null; } /**
* MAC生成随机密钥 两步走 1.创建一个KeyGenerator 2.调用KeyGenerator.generateKey方法
*
* @return
*/
public static byte[] generatorMACSecretKey() {
KeyGenerator keyGenerator;
try {
keyGenerator = KeyGenerator.getInstance(MAC_ALGORITHM);
SecretKey key = keyGenerator.generateKey();
return key.getEncoded();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} /**
* 还原密钥
*
* @param secretBytes
* @return
*/
public static SecretKey restoreMACSecretKey(byte[] secretBytes) {
SecretKey key = new SecretKeySpec(secretBytes, MAC_ALGORITHM);
return key;
}
}

JDK自带方法实现消息摘要运算的更多相关文章

  1. JDK自带方法实现AES对称加密

    请看代码. 1 package jdbc.pro.lin; 2 3 import java.security.InvalidAlgorithmParameterException; 4 import ...

  2. JDK自带方法实现RSA数字签名

    JDK 6只支持MD2withRSA, MD5withRSA, SHA1withRSA 其他的如SHA512withRSA需要第三方包支持,如BC(bouncy castle) --20151126 ...

  3. JDK自带方法实现RSA非对称加密

    package jdbc.pro.lin; import java.security.InvalidKeyException; import java.security.Key; import jav ...

  4. 使用JDK自带的MessageDigest计算消息摘要

    使用JDK自带的MessageDigest计算消息摘要 上代码 /** * 使用JDK自带MessageDigest */ public class MessageDigestUtils { /** ...

  5. JDK自带的日志Logging

    OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...

  6. [转]JDK自带工具之问题排查场景示例

    最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇Java调优经验谈.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://java-performa ...

  7. 011 - JDK自带的性能监控工具

      一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread du ...

  8. 基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案

    基于HTTP在互联网传输敏感数据的消息摘要.签名与加密方案 博客分类: 信息安全 Java 签名加密AESMD5HTTPS  一.关键词 HTTP,HTTPS,AES,SHA-1,MD5,消息摘要,数 ...

  9. JDK自带工具之问题排查场景示例

    最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇< Java调优经验谈 >.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://jav ...

随机推荐

  1. How to convert an IPv4 address into a integer in C#?

    仅仅针对于IPv4的处理方法 从string转换为int 以及从int转换为string // IPv4 int intAddress = BitConverter.ToInt32(IPAddress ...

  2. 【C++ in Qt5】一个简单的通讯录程序,支持文件存取

    https://github.com/shalliestera/AddressBook 使用Qt5完成了一些之前用DevCpp很难做到的事,比如更简单地实现“从文件读取”和“保存到文件”的功能.之前我 ...

  3. 【转】eclipse内存设置,tomcat内存设置,查看内存大小

    原文网址:http://www.cnblogs.com/youngjoy/p/4239978.html 首先可以通过java/jdk/bin下的java visualVM查看eclipse的内存大小和 ...

  4. JDBC初步 JDBC连接SQLServer 2008之心路历程

    转自:http://www.cnblogs.com/weilengdeyu/archive/2013/01/17/2864321.html JDBC简介 今天,研究了下JDBC连接SQL Server ...

  5. 《使用wxWidgets进行跨平台程序开发》chap09——布局一个对话框

    ///////////////////////////////////////////////////////////////////////////// // Name: personalrecor ...

  6. 研磨设计模式解析及python代码实现——(二)外观模式(Facade)

    一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...

  7. Yii框架常见问题汇总

    然用过Yii做了一个小项目了,但是过程中间解决的问题没有随手记下来,导致新项目开始后,以前碰到的问题还得在查一遍,干脆就记下来,以便不时之需. 有新的会随时更新. 1.如何显示ActiveRecord ...

  8. 一个好看的Input样式

    <div class="search"> <input type="text"></div> .search{ text-a ...

  9. btrace 笔记

    转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折 ...

  10. JQuery- 动画与效果

    这几天做网站,刚好用到! 1.基本效果 匹配元素从左上角开始变浓变大或缩小到左上角变淡变小 ①隐藏元素 除了可以设置匹配元素的display:none外,可以用以下函数 hide(speed,[cal ...