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

 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. OSS研究

    在以前没有毕业之前,做过了一个了播放器,其实就是mplayer的二次开发. 如果在这个播放器之上,加个oss作声音输入,那不就可以做个卡拉OK啦? 1.OSS的定义 OSS(Open Sound Sy ...

  2. Uncompressing Linux___ done, booting the kernel_tekkamanninja-ChinaUnix博客

    今天用主线Linux内核移植到MINI6410,主线内核2.6.37.1基本已经支持了MINI6410的板子,所以移植到能够启动起来的阶段很简单,但是在移植的时候还是出现了一个比较常见的问题: MIN ...

  3. javascript时间、随机数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  5. 【转】JAVA字符串格式化-String.format()的使用--不错

    原文网址:http://blog.csdn.net/lonely_fireworks/article/details/7962171 常规类型的格式化 String类的format()方法用于创建格式 ...

  6. asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法

    转:http://blog.csdn.net/llll29550242/article/details/6054323 ASP.net后台获取当前页面的文件名 System.IO.Path.GetFi ...

  7. Android——service重启

    一.在application中注册消息监听 public class BackgroundServiceApplication extends Application { @Override publ ...

  8. Square

    Square TimeLimit: 1 Second   MemoryLimit: 32 Megabyte Totalsubmit: 1638   Accepted: 440 Description ...

  9. HDU 2546 饭卡

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 呆呆. 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memo ...

  10. Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!

    Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...