Java常用訊息摘要演算法-SHA
阿新 • • 發佈:2019-01-30
SHA是比較常用的訊息摘要演算法之一,其中比較常見的有SHA-1,SHA-256,SHA-512。這裡用Java程式碼實現一個簡單的工具類,可以提取字串或者檔案的SHA值。
執行結果import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.security.MessageDigest; /** * SHA 訊息摘要工具類 * * @author lixk */ public class SHA { //摘要演算法名稱, SHA-1, SHA-256, SHA-512 private final static String ALGORITHM = "SHA-1"; /** * 提取位元組陣列的SHA * * @param data 待提取位元組陣列 * @return * @throws Exception */ public static String encrypt(byte[] data) throws Exception { //獲取SHA摘要演算法例項 MessageDigest messageDigest = MessageDigest.getInstance(ALGORITHM); //計算訊息摘要 byte[] bytes = messageDigest.digest(data); //返回16進位制格式字串 return byte2Hex(bytes); } /** * 提取字元的SHA * * @param data 待提取字串 * @return * @throws Exception */ public static String encrypt(String data) throws Exception { return encrypt(data.getBytes()); } /** * 提取資料流的SHA * * @param inputStream 待提取資料流 * @return * @throws Exception */ public static String encrypt(InputStream inputStream) throws Exception { //獲取SHA摘要演算法例項 MessageDigest messageDigest = MessageDigest.getInstance(ALGORITHM); //計算訊息摘要 byte[] bytes = new byte[1024]; while (inputStream.read(bytes) != -1) { messageDigest.update(bytes); } //返回16進位制格式字串 return byte2Hex(messageDigest.digest()); } /** * 提取檔案的SHA * * @param file 待提取檔案 * @return * @throws Exception */ public static String encrypt(File file) throws Exception { return encrypt(new FileInputStream(file)); } /** * 將byte轉為16進位制 * * @param bytes * @return */ private static String byte2Hex(byte[] bytes) { StringBuilder data = new StringBuilder(bytes.length); for (byte b : bytes) { data.append(Integer.toHexString((b >> 4) & 0xf)); //高4位 data.append(Integer.toHexString(b & 0xf)); //低4位 } return data.toString(); } /** * 測試 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //提取字串的SHA System.out.println(SHA.encrypt("SHA 訊息摘要測試!")); //提取檔案的SHA //System.out.println(SHA.encrypt(new File("C://test.txt"))); } }
0fe2e3d2a5f6e8b17348db434aa45db8ae43bd31