您的位置:首页 > 编程语言 > Java开发

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: