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); } }
Tag Archives: Digest
VC计算CString摘要
1、VC计算字符串MD5摘要
//输入:要计算摘要的字符串 //输出:128位MD5摘要 #include <wincrypt.h> CString szResult; CString CDigestDlg::CalcMD5(CString strContent) { DWORD dwLength=0; BYTE* pbContent=NULL; dwLength = (DWORD)strContent.GetLength(); pbContent = new BYTE[dwLength]; memcpy(pbContent,strContent.GetBuffer(dwLength),dwLength); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteMD5[16]; DWORD dwHashLen=16; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteMD5, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteMD5[0],byteMD5[1],byteMD5[2],byteMD5[3],byteMD5[4],byteMD5[5],byteMD5[6],byteMD5[7] ,byteMD5[8],byteMD5[9],byteMD5[10],byteMD5[11],byteMD5[12],byteMD5[13],byteMD5[14],byteMD5[15]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
2、VC计算字符串SHA1摘要
//输入:要计算摘要的字符串 //输出:160位SHA1摘要 #include <wincrypt.h> CString szResult; CString CDigestDlg::CalcSHA1(CString strContent) { DWORD dwLength=0; BYTE* pbContent=NULL; dwLength = (DWORD)strContent.GetLength(); pbContent = new BYTE[dwLength]; memcpy(pbContent,strContent.GetBuffer(dwLength),dwLength); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteSHA1[20]; DWORD dwHashLen=20; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteSHA1, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteSHA1[0],byteSHA1[1],byteSHA1[2],byteSHA1[3],byteSHA1[4],byteSHA1[5],byteSHA1[6],byteSHA1[7], byteSHA1[8],byteSHA1[9],byteSHA1[10],byteSHA1[11],byteSHA1[12],byteSHA1[13],byteSHA1[14],byteSHA1[15], byteSHA1[16],byteSHA1[17],byteSHA1[18],byteSHA1[19]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
VC计算文件摘要
1、VC计算文件MD5摘要
//输入:文件路径 //输出:128位MD5摘要 #include <wincrypt.h> CString szResult; CString CMD5AndSHA1Dlg::CalcMD5(CString strFilePath) { //读取文件 CFile inFile; CFileException ex; DWORD dwLength=0; BYTE* pbContent=NULL; BOOL bRet; bRet=inFile.Open(strFilePath,CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite,&ex); if(bRet==FALSE) { return TEXT("Error opening file");; } dwLength = (DWORD)inFile.GetLength(); pbContent = new BYTE[dwLength]; if(pbContent==NULL) { return TEXT("Error not enough memory");; } inFile.Read(pbContent,dwLength); inFile.Close(); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteMD5[16]; DWORD dwHashLen=16; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteMD5, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteMD5[0],byteMD5[1],byteMD5[2],byteMD5[3],byteMD5[4],byteMD5[5],byteMD5[6],byteMD5[7] ,byteMD5[8],byteMD5[9],byteMD5[10],byteMD5[11],byteMD5[12],byteMD5[13],byteMD5[14],byteMD5[15]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
2、VC计算文件SHA1摘要
//输入:文件路径(文件必须小于2^64bit) //输出:160位SHA1摘要 #include <wincrypt.h> CString szResult; CString CMD5AndSHA1Dlg::CalcSHA1(CString strFilePath) { //读取文件 CFile inFile; CFileException ex; DWORD dwLength=0; BYTE* pbContent=NULL; BOOL bRet; bRet=inFile.Open(strFilePath,CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite,&ex); if(bRet==FALSE) { return TEXT("Error opening file");; } dwLength = (DWORD)inFile.GetLength(); pbContent = new BYTE[dwLength]; if(pbContent==NULL) { return TEXT("Error not enough memory");; } inFile.Read(pbContent,dwLength); inFile.Close(); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteSHA1[20]; DWORD dwHashLen=20; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteSHA1, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteSHA1[0],byteSHA1[1],byteSHA1[2],byteSHA1[3],byteSHA1[4],byteSHA1[5],byteSHA1[6],byteSHA1[7], byteSHA1[8],byteSHA1[9],byteSHA1[10],byteSHA1[11],byteSHA1[12],byteSHA1[13],byteSHA1[14],byteSHA1[15], byteSHA1[16],byteSHA1[17],byteSHA1[18],byteSHA1[19]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }