hash值和hash算法

  1. hash值的做用

        如今主流的仍是base64編碼,進行對字符串的編碼。base64其實不是安全領域下的加密解密算法。雖然有時候常常看到所謂的base64加密解密。其實base64只能算是一個編碼算法,對數據內容進行編碼來適合傳輸。雖然base64編碼事後原文也變成不能看到的字符格式,可是這種方式很初級,很簡單。通常高級一點的程序員一眼就能看出來是否是用的base64進行編碼,進而經過base64的解密,得出想要的結果。java

        因此使用hash值進行編碼的轉換,由於hash值是惟一的,不可逆的!可是經過hash編碼倒是能夠的!二是由於hash值一串數字比較不容易辨別是否是hash值。
    
    程序員

    2.hash值算法

    通常是把字符串或者byte[],當成一個數組進行遍歷,而後轉換爲int類型的值。hash主要用於信息安全領域中加密算法,它把一些不一樣長度的信息轉化成雜亂的128位的編碼,這些編碼值叫作HASH值. 也能夠說,hash就是找到一種數據內容和數據存放地址之間的映射關係。數組

    3.hash值的計算算法安全

這個只是其中的一種算法:服務器

/**
      * 使用FNV1_32_HASH算法計算服務器的Hash值,這裏不使用重寫hashCode的方法,最終效果沒區別 
      */
     private static int getHash(String str)
     {
         final int p = 16777619;
         int hash = (int)2166136261L;
         for (int i = 0; i < str.length(); i++)
            hash = (hash ^ str.charAt(i)) * p;
        hash += hash << 13;
         hash ^= hash >> 7;
         hash += hash << 3;
         hash ^= hash >> 17;
         hash += hash << 5;
         
         // 若是算出來的值爲負數則取其絕對值
         if (hash < 0)
             hash = Math.abs(hash);
         return hash;
     }

    4.字符串與byte[]數組之間的轉換app

//byte[]轉換String
private static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }

		for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
		}
        return stringBuilder.toString();

	}


    //String轉換爲byte[]
	private static byte[] hexStringToBytes(String hexString) {
		if (hexString == null || hexString.equals("")) {
			return null;
		}
		hexString = hexString.toUpperCase();
		int length = hexString.length() / 2;
		char[] hexChars = hexString.toCharArray();
		byte[] d = new byte[length];
		for (int i = 0; i < length; i++) {
			int pos = i * 2;
			d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
		}
		return d;
	}
相關文章
相關標籤/搜索