java加密算法--MD5加密和哈希散列带秘钥加密算法源码

所属分类: 软件编程 / java 阅读数: 56
收藏 0 赞 0 分享

java加密算法--MD5加密和哈希散列带秘钥加密算法源码

             最近学习加密算法的知识,利用MD5 加密,百度一下网上资料很多,不是很详细,这里就整理下如何实现用MD5加密和 哈希散列带秘钥加密算法,大家可以看下。

实现代码:

package com.ompa.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
* 采用MD5加密 
* 
* @author zhangcd
* @date 2016-4-29
*/
public class EncryptUtil { 

private static final String MAC_NAME = "HmacSHA1"; 
private static final String ENCODING = "UTF-8"; 
private static final String key = "iloveyou";

/*** 
* MD5加码 生成32位md5码 
*/ 
public static String string2MD5(String inStr){ 
MessageDigest md5 = null; 
try{ 
md5 = MessageDigest.getInstance("MD5"); 
}catch (Exception e){ 
System.out.println(e.toString()); 
e.printStackTrace(); 
return ""; 
} 
char[] charArray = inStr.toCharArray(); 
byte[] byteArray = new byte[charArray.length]; 

for (int i = 0; i < charArray.length; i++) 
byteArray[i] = (byte) charArray[i]; 
byte[] md5Bytes = md5.digest(byteArray); 
StringBuffer hexValue = new StringBuffer(); 
for (int i = 0; i < md5Bytes.length; i++){ 
int val = ((int) md5Bytes[i]) & 0xff; 
if (val < 16) 
hexValue.append("0"); 
hexValue.append(Integer.toHexString(val)); 
} 
return hexValue.toString(); 

} 

/*** 
* MD5加密 生成32位md5码 
*/ 
public static String stringMD5(String inStr){ 
return string2MD5(string2MD5(inStr)); 

}

/** 
* 加密解密算法
*/ 
public static String convertMD5(String inStr){ 

char[] a = inStr.toCharArray(); 
for (int i = 0; i < a.length; i++){ 
a[i] = (char) (a[i] ^ 't'); 
} 
String s = new String(a); 
return s; 

} 

/** 
* HMAC-SHA1 
* @param encryptText 
* @param encryptKey 
* @return 
* @throws Exception 
*/ 
public static String HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception 
{ 
byte[] data=encryptKey.getBytes(ENCODING); 
SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); 
Mac mac = Mac.getInstance(MAC_NAME); 
mac.init(secretKey); 

byte[] text = encryptText.getBytes(ENCODING); 
byte[] str = mac.doFinal(text);
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < str.length; i++) {
String shaHex = Integer.toHexString(str[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} 

public static String convertSHA1(String instr){
try {
return HmacSHA1Encrypt(instr,key);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}

// 测试主函数 
public static void main(String args[]) throws Exception { 
//哈希散列带秘钥加密
String tt = convertSHA1("123456");
System.out.println(tt);

//MD5加密
String s = new String("123456"); 
System.out.println("原始:" + s); 
System.out.println("MD5后:" + string2MD5(s)); 
System.out.println("MD5加密后:" + stringMD5(s));
} 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多