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

 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;
}
}

最新文章

  1. [整理]Web应用安全学习
  2. 从零开始学android开发-查看sqlite数据库
  3. 3D分析之Functional Surface工具箱(转)
  4. python模块之bsddb: bdb高性能嵌入式数据库 1.基础知识
  5. C语言的本质(29)——C语言与汇编之寄存器和寻址方式
  6. 使用VS+VisualGDB编译Linux版本RCF(相当于Linux也有COM版本了)
  7. PHP学习笔记----IIS7下安装配置php环境
  8. Dirichlet's Theorem on Arithmetic Progression
  9. golang环境搭建
  10. Spring MVC 请求处理流程概览
  11. Docker系统五:Docker仓库
  12. 剑指Offer-字符流中第一个不重复的字符
  13. SQL Server使用sp_rename重命名约束注意事项
  14. Golang Go Go Go part3:数据类型及操作
  15. js密码修改显示与隐藏效果
  16. springboot后台运行
  17. c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用
  18. Java中Optional类的使用
  19. 【linux】shell代码,获取当前路径,创建文件夹
  20. javascript 的原型与原型链的理解

热门文章

  1. 【Xamarin挖墙脚系列:应用的性能调优】
  2. Vijos_1792_摆花_(动态规划,多重集组合数)
  3. nginx + memcached-session-manager 实现tomcat下的负载均衡
  4. 【转】命令行使用7zip
  5. HDU-1395 2^x mod n = 1
  6. HTTP 错误 404.3 - Forbidden
  7. JavaScript---网络编程(10)--DHTML技术演示(3)-多选框
  8. 【转载】zookeeper 分布式锁 实现
  9. 常用的Git命令
  10. JavaScript高级程序设计61.pdf