Java 加解密技术系列之 SHA

  1. <span style="font-family:Comic Sans MS;font-size:12px;">package com.sica.sha;  
  2.   
  3. import com.google.common.base.Strings;  
  4.   
  5. import java.security.MessageDigest;  
  6.   
  7. /** 
  8.  * Created by xiang.li on 2015/2/11. 
  9.  */  
  10. public class SHA {  
  11.     /** 
  12.      * 定义加密方式 
  13.      */  
  14.     private final static String KEY_SHA = "SHA";  
  15.     private final static String KEY_SHA1 = "SHA-1";  
  16.     /** 
  17.      * 全局数组 
  18.      */  
  19.     private final static String[] hexDigits = { "0""1""2""3""4""5",  
  20.             "6""7""8""9""a""b""c""d""e""f" };  
  21.   
  22.     /** 
  23.      * 构造函数 
  24.      */  
  25.     public SHA() {  
  26.   
  27.     }  
  28.   
  29.     /** 
  30.      * SHA 加密 
  31.      * @param data 需要加密的字节数组 
  32.      * @return 加密之后的字节数组 
  33.      * @throws Exception 
  34.      */  
  35.     public static byte[] encryptSHA(byte[] data) throws Exception {  
  36.         // 创建具有指定算法名称的信息摘要  
  37. //        MessageDigest sha = MessageDigest.getInstance(KEY_SHA);  
  38.         MessageDigest sha = MessageDigest.getInstance(KEY_SHA1);  
  39.         // 使用指定的字节数组对摘要进行最后更新  
  40.         sha.update(data);  
  41.         // 完成摘要计算并返回  
  42.         return sha.digest();  
  43.     }  
  44.   
  45.     /** 
  46.      * SHA 加密 
  47.      * @param data 需要加密的字符串 
  48.      * @return 加密之后的字符串 
  49.      * @throws Exception 
  50.      */  
  51.     public static String encryptSHA(String data) throws Exception {  
  52.         // 验证传入的字符串  
  53.         if (Strings.isNullOrEmpty(data)) {  
  54.             return "";  
  55.         }  
  56.         // 创建具有指定算法名称的信息摘要  
  57.         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);  
  58.         // 使用指定的字节数组对摘要进行最后更新  
  59.         sha.update(data.getBytes());  
  60.         // 完成摘要计算  
  61.         byte[] bytes = sha.digest();  
  62.         // 将得到的字节数组变成字符串返回  
  63.         return byteArrayToHexString(bytes);  
  64.     }  
  65.   
  66.     /** 
  67.      * 将一个字节转化成十六进制形式的字符串 
  68.      * @param b 字节数组 
  69.      * @return 字符串 
  70.      */  
  71.     private static String byteToHexString(byte b) {  
  72.         int ret = b;  
  73.         //System.out.println("ret = " + ret);  
  74.         if (ret < 0) {  
  75.             ret += 256;  
  76.         }  
  77.         int m = ret / 16;  
  78.         int n = ret % 16;  
  79.         return hexDigits[m] + hexDigits[n];  
  80.     }  
  81.   
  82.     /** 
  83.      * 转换字节数组为十六进制字符串 
  84.      * @param bytes 字节数组 
  85.      * @return 十六进制字符串 
  86.      */  
  87.     private static String byteArrayToHexString(byte[] bytes) {  
  88.         StringBuffer sb = new StringBuffer();  
  89.         for (int i = 0; i < bytes.length; i++) {  
  90.             sb.append(byteToHexString(bytes[i]));  
  91.         }  
  92.         return sb.toString();  
  93.     }  
  94.   
  95.     /** 
  96.      * 测试方法 
  97.      * @param args 
  98.      */  
  99.     public static void main(String[] args) throws Exception {  
  100.         String key = "123";  
  101.         System.out.println(encryptSHA(key));  
  102.     }  
  103. }</span>  

你可能感兴趣的:(Java 加解密技术系列之 SHA)