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 ...
随机推荐
- NAND FLASH的容量、特性、市场和应用
NAND Flash的容量 一直到2006年,MLC芯片的容量每年都成倍数增长:由于NAND Flash的制程升级的挑战越来越大,所以NAND Flash之后的容量成倍增长所需要的时间也在不断增加 ...
- 猜测:信号槽的本质是使用Windows的自定义消息来实现的
在不断执行: void MyTool::DeleteAllFiles(){ for (i = 0; i <= n - 1; i++) { // do something }}在for循环没有执行 ...
- android View 关于transient
今天来研究一下 ListView 的删除动画 由于 ListView 卷动时会把画面上的 item 重用以显示不同数据 这样会导致我们可能会删除到非正确的 item 或是出现显示上的问题(该 item ...
- bzoj1449
竞赛图一般是把每场比赛当作一个点,然后和相应球队连边每场比赛一赢一输对两支球队都有影响看起来不好搞实际上我们可以先假设参加后面后面所有球队都输(每场比赛双输)然后对每场比赛我们选择一支球队赢计算增加的 ...
- c#4.0新特性之协变与逆变
1.C#3.0以前的协变与逆变 如果你是第一次听说这个两个词,别担心,他们其实很常见.C#4.0中的协变与逆变[1](Covariance and contravariance)有了进一步的完善,主要 ...
- BZOJ2661: [BeiJing wc2012]连连看
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 483 Solved: 200[Submit][S ...
- I Hate It HDOJ---1754
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Red and Black
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- B. Fixed Points
B. Fixed Points time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- C#开发移动平台iOS、Android 与Windows
1.Xamarin http://www.csdn.net/article/2014-02-28/2818585-Xamarin-CSDN-mobile-develop