JDK自带方法实现消息摘要运算
啊,有点小注释,懒得介绍了,就贴个代码吧,大意理解就可以了。
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自带方法实现消息摘要运算的更多相关文章
- JDK自带方法实现AES对称加密
请看代码. 1 package jdbc.pro.lin; 2 3 import java.security.InvalidAlgorithmParameterException; 4 import ...
- JDK自带方法实现RSA数字签名
JDK 6只支持MD2withRSA, MD5withRSA, SHA1withRSA 其他的如SHA512withRSA需要第三方包支持,如BC(bouncy castle) --20151126 ...
- JDK自带方法实现RSA非对称加密
package jdbc.pro.lin; import java.security.InvalidKeyException; import java.security.Key; import jav ...
- 使用JDK自带的MessageDigest计算消息摘要
使用JDK自带的MessageDigest计算消息摘要 上代码 /** * 使用JDK自带MessageDigest */ public class MessageDigestUtils { /** ...
- JDK自带的日志Logging
OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...
- [转]JDK自带工具之问题排查场景示例
最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇Java调优经验谈.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://java-performa ...
- 011 - JDK自带的性能监控工具
一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id jstack 查看Java线程 jstack -l pid; 做thread du ...
- 基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案
基于HTTP在互联网传输敏感数据的消息摘要.签名与加密方案 博客分类: 信息安全 Java 签名加密AESMD5HTTPS 一.关键词 HTTP,HTTPS,AES,SHA-1,MD5,消息摘要,数 ...
- JDK自带工具之问题排查场景示例
最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇< Java调优经验谈 >.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://jav ...
随机推荐
- void (*fun)(void);什么意思?
2440test程序中的Main.c中在结构体中有这么一句: void (*fun)(void); 后查阅资料得知这句代码的意思是: 定义一个函数指针. 比如:定义一个指向函数的指针,该函数有一个整形 ...
- linux上TCP connection timeout的原因查找
linux上TCP connection timeout的原因查找 好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看. 最近在线上nginx经常出现输出connection tim ...
- (转载)Chrome 快捷键 整理版
(转载)http://www.douban.com/group/topic/13802153/ chrome窗口和标签页快捷键: Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shi ...
- java 正则表达式去除标点符号
public class Test { public static void main(String[] args) { String str = "!!!??!!!!%*)%¥!KTV ...
- Sql Server CONVERT获取当前日期及日期样式
Sql Server CONVERT获取当前日期及日期样式(转)(2012-06-06 12:00:24) 转载▼ // 标签: 杂谈 分类: SQL Sql Server CONVERT样式 获取当 ...
- HDU-1518 Square(DFS)
Square Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submi ...
- 1003: A Bug
题目链接:http://172.16.200.33/JudgeOnline/problem.php?id=1003 分析: (1)题意很简单,就是检查一堆数据中是否有同性恋,找出主要矛盾是如果1喜欢2 ...
- Fiddler基本用法以及如何对手机抓包
一.Fiddler是什么? ·一种Web调试工具. ·可以记录所有客户端和服务器的http和https请求. ·允许监视.设置断点.修改输入输出数据. 官方文档(英文):http://docs.tel ...
- Poj 3683-Priest John's Busiest Day 2-sat,拓扑排序
Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8872 Accept ...
- 普通用户从非80端口启动tomcat,通过端口转发监听80端口
linux下小于1024的端口都需要root去绑定. root权限启动tomcat是不明智的,可以使用非root权限启动tomcat监听8080端口,然后利用端口转发实现对80端口的监听. 端口转发: ...