package com.neohope.utils;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class NDigest
{
/**
* Bytes to Hex String
*
* @param hexBytes
*
* @return hex string
*/
private static String bytesToHexString(byte[] hexBytes)
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < hexBytes.length; i++)
{
if ((hexBytes[i] & 0xff) < 0x10)
{
buf.append("0");
}
buf.append(Long.toString(hexBytes[i] & 0xff, 16));
}
return buf.toString();
}
/**
* calc MD5 for string
*
* @param textIn
*
* @return md5 digest string
* @throws NoSuchAlgorithmException
*/
public static String MD5Digest(String textIn)
throws NoSuchAlgorithmException
{
byte[] textData = textIn.getBytes();
MessageDigest md = null;
md = MessageDigest.getInstance("MD5");
md.reset();
md.update(textData);
byte[] encodedData = md.digest();
return bytesToHexString(encodedData);
}
/**
* calc SHA1 for string
*
* @param textIn
*
* @return sha1 digest string
* @throws NoSuchAlgorithmException
*/
public static String SHA1Digest(String textIn)
throws NoSuchAlgorithmException
{
byte[] textData = textIn.getBytes();
MessageDigest md = null;
md = MessageDigest.getInstance("SHA1");
md.reset();
md.update(textData);
byte[] encodedData = md.digest();
return bytesToHexString(encodedData);
}
/**
* Encode a string using Base64 encoding.
*
* @param textIn
* @return String
*/
public static String base64Encode(String textIn)
{
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
return encoder.encodeBuffer(textIn.getBytes()).trim();
}
/**
* Decode a string using Base64 encoding.
*
* @param textIn
* @return String
* @throws IOException
*/
public static String decodeString(String textIn) throws IOException
{
sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
return new String(dec.decodeBuffer(textIn));
}
/**
* 使用 HMAC-SHA-1 签名方法对对textIn进行摘要
*
* @param textIn
* @param keyIn
* @return
* @throws Exception
*/
public static String HmacSHA1Digest(String textIn, String keyIn)
throws Exception
{
final String MAC_NAME = "HmacSHA1";
final String ENCODING = "UTF-8";
byte[] keyData = keyIn.getBytes(ENCODING);
SecretKey secretKey = new SecretKeySpec(keyData, MAC_NAME);
Mac mac = Mac.getInstance(MAC_NAME);
mac.init(secretKey);
byte[] textData = textIn.getBytes(ENCODING);
byte[] encodedData = mac.doFinal(textData);
return bytesToHexString(encodedData);
}
// 我就是那个测试函数。。。
public static void main(String args[]) throws Exception
{
String key = "Y9zTQxRvxwrHOi45OoKNnIoxboerNqt3";
String text = "Good good study, day day up.";
String hmacSHA1 = HmacSHA1Digest(text, key );
String base64 = base64Encode(hmacSHA1);
System.out.println(hmacSHA1 );
System.out.println(cbase64);
}
}