Java中消息摘要的编程(MD5/SHA/HMAC)的使用
2016-10-14 22:05
260 查看
主类:
/**
* Created by cuboo on 2016/10/14.
*/
public class Main {
public static void main(String agrs[]) throws Exception {
//String keyType = "MD5";
// String keyType = "SHA-1"/SHA-256/SHA-384/SHA-512
// byte[] data = "abcdefg".getBytes();
// byte[] encryptData = Messagedigest.getMD5ofFile("text.txt",keyType);
//HMAC算法的编程使用
// String keyType = "HmacMD5";//HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512
//
// byte[] data = "abcdefg".getBytes();
// byte[] key = Messagedigest.InitKey(keyType);
// byte[] encryptData = Messagedigest.encrypt(key,keyType,data);
//
// System.out.println(bytesToHexString(key));
// System.out.println(fromBytesToHexString(encryptData));
}
public static String bytesToHexString(byte[] data){
StringBuilder strb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
String str = Integer.toHexString(data[i] & 0xFF);
if (str.length() == 1){
strb.append(0).append(str);
}else {
strb.append(str);
}
}
return strb.toString();
}
public static String fromBytesToHexString(byte[] data){
StringBuilder str = new StringBuilder();
for (int i = 0; i < data.length; i++) {
String s = Integer.toHexString(0xFF & data[i]);
if (s.length() == 1){
str.append(0).append(s);
}else {
str.append(s);
}
}
return str.toString();
}
public static String fromHexStringToString(String str){
char[] c = str.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < c.length-1; i+=2) {
int num = (c[i]-'0')*16+(c[i+1]-'0')*1;
builder.append((char) num);
}
return builder.toString();
}
}
方法类:
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
/**
* Created by cuboo on 2016/10/14.
*/
public class Messagedigest {
//获得byte数组的MD5/SHA
public static byte[] encryptMD5(byte[] data,String codeType) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(codeType);
md5.update(data);
return md5.digest();
}
//获得文件的MD5/SHA
public static byte[] getMD5ofFile(String path,String codeType) throws Exception {
FileInputStream fis = new FileInputStream(path);
DigestInputStream dis = new DigestInputStream(fis,MessageDigest.getInstance(codeType));
byte[] buffer = new byte[1024];
int reader = dis.read(buffer);
if (reader != 1){
reader = dis.read(buffer);
}
MessageDigest md5 = dis.getMessageDigest();
return md5.digest();
}
/*
*生成秘钥
*/
public static byte[] InitKey(String keyType) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(keyType);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
/*
*加密
*/
public static byte[] encrypt(byte[] key,String keyType,byte[] data)
throws Exception {
SecretKey secretKey = new SecretKeySpec(key,keyType);
Mac mac = Mac.getInstance(keyType);
mac.init(secretKey);
return mac.doFinal(data);
}
}
/**
* Created by cuboo on 2016/10/14.
*/
public class Main {
public static void main(String agrs[]) throws Exception {
//String keyType = "MD5";
// String keyType = "SHA-1"/SHA-256/SHA-384/SHA-512
// byte[] data = "abcdefg".getBytes();
// byte[] encryptData = Messagedigest.getMD5ofFile("text.txt",keyType);
//HMAC算法的编程使用
// String keyType = "HmacMD5";//HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512
//
// byte[] data = "abcdefg".getBytes();
// byte[] key = Messagedigest.InitKey(keyType);
// byte[] encryptData = Messagedigest.encrypt(key,keyType,data);
//
// System.out.println(bytesToHexString(key));
// System.out.println(fromBytesToHexString(encryptData));
}
public static String bytesToHexString(byte[] data){
StringBuilder strb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
String str = Integer.toHexString(data[i] & 0xFF);
if (str.length() == 1){
strb.append(0).append(str);
}else {
strb.append(str);
}
}
return strb.toString();
}
public static String fromBytesToHexString(byte[] data){
StringBuilder str = new StringBuilder();
for (int i = 0; i < data.length; i++) {
String s = Integer.toHexString(0xFF & data[i]);
if (s.length() == 1){
str.append(0).append(s);
}else {
str.append(s);
}
}
return str.toString();
}
public static String fromHexStringToString(String str){
char[] c = str.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < c.length-1; i+=2) {
int num = (c[i]-'0')*16+(c[i+1]-'0')*1;
builder.append((char) num);
}
return builder.toString();
}
}
方法类:
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
/**
* Created by cuboo on 2016/10/14.
*/
public class Messagedigest {
//获得byte数组的MD5/SHA
public static byte[] encryptMD5(byte[] data,String codeType) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(codeType);
md5.update(data);
return md5.digest();
}
//获得文件的MD5/SHA
public static byte[] getMD5ofFile(String path,String codeType) throws Exception {
FileInputStream fis = new FileInputStream(path);
DigestInputStream dis = new DigestInputStream(fis,MessageDigest.getInstance(codeType));
byte[] buffer = new byte[1024];
int reader = dis.read(buffer);
if (reader != 1){
reader = dis.read(buffer);
}
MessageDigest md5 = dis.getMessageDigest();
return md5.digest();
}
/*
*生成秘钥
*/
public static byte[] InitKey(String keyType) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(keyType);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
/*
*加密
*/
public static byte[] encrypt(byte[] key,String keyType,byte[] data)
throws Exception {
SecretKey secretKey = new SecretKeySpec(key,keyType);
Mac mac = Mac.getInstance(keyType);
mac.init(secretKey);
return mac.doFinal(data);
}
}
相关文章推荐
- 网络编程____使用java给公司用飞q软件的同事群发消息
- 消息摘要的编程使用(MD5、SHA、HMAC)
- Java安全学习笔记(六)-使用消息摘要验证口令
- 使用java.util.concurrent实现的线程池、消息队列功能
- Java网络编程基础 ServerSocket类使用
- 使用 WebSphere Studio Application Developer 集成版,版本 4.1 开发 Java 消息服务应用程序
- 使用xmlhttp和Java session监听改善站内消息系统(转)
- 使用Java开始面向对象的编程
- java动画编程:使用双缓冲,消除闪烁
- 使用xmlhttp和Java session监听改善站内消息系统
- Java网络编程基础 InetAddress类的使用
- Delphi编程:Window消息大全使用详解(1)
- 使用xmlhttp和Java session监听改善站内消息系统
- Delphi编程:Window消息大全使用详解(2)
- Java网络编程基础 InetAddress类的使用
- Java网络编程基础 Datagram类使用方法
- 使用xmlhttp和Java session监听改善站内消息
- 使用C#编程将websphere MQ 5.3 windows客户端消息发送到linux服务器端
- “摘要”算法,使用示例。(java, sha) [备忘]
- 使用xmlhttp和Java session监听改善站内消息系统