Java 實現字符串SHA1加密方法

Java 字符串SHA1加密

導入類

import java.security.MessageDigest;

定義函數

private String toUserPwd(final String password) {
  try {
   if (password == null) {
    return null;
   }
   final MessageDigest messageDigest = MessageDigest.getInstance("SHA");
   final byte[] digests = messageDigest.digest(password.getBytes());
   final StringBuilder stringBuilder = new StringBuilder();
   for (int i = 0; i < digests.length; i++) {
    int halfbyte = (digests[i] >>> 4) & 0x0F;
    for (int j = 0; j <= 1; j++) {
     stringBuilder.append(
       ((0 <= halfbyte) && (halfbyte <= 9))
         ? (char) ('0' + halfbyte)
         : (char) ('a' + (halfbyte - 10)));
     halfbyte = digests[i] & 0x0F;
    }
   }
   return stringBuilder.toString();
  } catch (final Throwable throwable) {
   this.log.error("error converting password", throwable);
   return null;
  }
 }

javaSHA1實現加密解密

封裝一個方法用於加密

/**
     * sha1加密
     * @param data
     * @return
     * @throws NoSuchAlgorithmException 
     */
    public static String sha1(String data) throws NoSuchAlgorithmException {
        //加鹽   更安全一些
        data += "lyz";
        //信息摘要器                                算法名稱
        MessageDigest md = MessageDigest.getInstance("SHA1");
        //把字符串轉為字節數組
        byte[] b = data.getBytes();
        //使用指定的字節來更新我們的摘要
        md.update(b);
        //獲取密文  (完成摘要計算)
        byte[] b2 = md.digest();
        //獲取計算的長度
        int len = b2.length;
        //16進制字符串
        String str = "0123456789abcdef";
        //把字符串轉為字符串數組
        char[] ch = str.toCharArray();
        
        //創建一個40位長度的字節數組
        char[] chs = new char[len*2];
        //循環20次
        for(int i=0,k=0;i<len;i++) {
            byte b3 = b2[i];//獲取摘要計算後的字節數組中的每個字節
            // >>>:無符號右移  
            // &:按位與
            //0xf:0-15的數字
            chs[k++] = ch[b3 >>> 4 & 0xf];
            chs[k++] = ch[b3 & 0xf];
        }
        
        //字符數組轉為字符串
        return new String(chs);
    }

主函數測試

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String data = "跳梁小豆tlxd666";
        String result = sha1(data);
        System.out.println("加密後:"+result);
    }    

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: