1. 程式人生 > >JAVA開發經驗(二):常用工具類1.1-加解密-MD5

JAVA開發經驗(二):常用工具類1.1-加解密-MD5

摘要說明:

MD5:(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4演算法。

MD5本質上是不可逆的,部分加密也是通過加密庫來進行解密的;

Maven依賴:

無,使用jdk預設即可

java工具類:

MD5Util主要包括加密32位大寫,加密32位小寫,加密16位大寫,加密16位小寫:

package com.tit.taf.encryption;

import java.security.MessageDigest;

/**
 * 
 * @模組名:module_taf
 * @包名:com.tit.taf.encryption
 * @類名稱: MD5Util
 * @類描述:【類描述】MD5加密包括32大小寫、16位大小寫
 * @版本:1.0
 * @建立人:cc
 * @建立時間:2018年7月27日下午2:11:44
 */
public class MD5Util {
    private static String m_algorithm = "MD5";

    /**
     * 
     * @方法名:encryption
     * @方法描述【方法功能描述】MD5加密32位小寫
     * @param encryptStr 明文
     * @return 32位小寫密文
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年7月27日 下午2:15:35
     * @修改人:cc
     * @修改時間:2018年7月27日 下午2:15:35
     */
    public static String encryption(String encryptStr) {
        String re_md5 = new String();
        try {
            MessageDigest md = MessageDigest.getInstance(m_algorithm);
            md.update(encryptStr.getBytes("UTF-8"));
            byte b[] = md.digest();
            int i;
            StringBuilder builder = new StringBuilder("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    builder.append("0");
                builder.append(Integer.toHexString(i));
            }
            re_md5 = builder.toString();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return re_md5;
    }

    /**
     * 
     * @方法名:ENCRYPTION
     * @方法描述【方法功能描述】MD5加密32位大寫
     * @param encryptStr 明文
     * @return 32位大寫密文
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年7月27日 下午2:17:46
     * @修改人:cc
     * @修改時間:2018年7月27日 下午2:17:46
     */
    public static String ENCRYPTION(String encryptStr) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            byte[] btInput = encryptStr.getBytes();
            // 獲得MD5摘要演算法的 MessageDigest 物件
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的位元組更新摘要
            mdInst.update(btInput);
            // 獲得密文
            byte[] md = mdInst.digest();
            // 把密文轉換成十六進位制的字串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        }
        catch (Exception e) {
            return null;
        }
    }

    /**
     * 
     * @方法名:encryption16
     * @方法描述【方法功能描述】MD5加密16位小寫
     * @param encryptStr 明文
     * @return 16位小寫密文
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年7月27日 下午2:18:26
     * @修改人:cc
     * @修改時間:2018年7月27日 下午2:18:26
     */
    public static String encryption16(String encryptStr) {
        return encryption(encryptStr).substring(8, 24);
    }

    /**
     * 
     * @方法名:ENCRYPTION16
     * @方法描述【方法功能描述】 MD5加密16位大寫
     * @param encryptStr 明文
     * @return 16位大寫密文
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年7月27日 下午2:19:17
     * @修改人:cc
     * @修改時間:2018年7月27日 下午2:19:17
     */
    public static String ENCRYPTION16(String encryptStr) {
        return ENCRYPTION(encryptStr).substring(8, 24);
    }

    public static void main(String[] args) {
        try {
            System.out.println(MD5Util.encryption("cc"));// e0323a9039add2978bf5b49550572c7c
            System.out.println(MD5Util.ENCRYPTION("cc"));// E0323A9039ADD2978BF5B49550572C7C
            System.out.println(MD5Util.encryption16("cc"));// 39add2978bf5b495
            System.out.println(MD5Util.ENCRYPTION16("cc"));// 39ADD2978BF5B495
        }
        catch (Exception e) {
            System.out.println(e);
        }

    }
}

相關推薦

JAVA開發經驗:常用工具2.1-IO-檔案操作FileUtil

摘要說明: FileUtil主要是整合Apache Commons IO庫中的FileUtils類;主要包括對檔案的屬性查詢,複製,移動,檔案讀取,刪除等 Apache Commons IO庫包含實用程式類,流實現,檔案過濾器,檔案比較器,位元組序轉換類等等 Maven

JAVA開發經驗:常用工具1.1-解密-MD5

摘要說明: MD5:(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn

Java開發筆記Java工程的帝國區劃

頂部 圖片 最有 屬於 聚集地 合格 ext info 主界面 上一篇文章介紹了如何運行了第一個Java程序“Hello World”。然而這個開發環境看起來那麽陌生,一個個名字符號完全不知道它們是幹啥的呀,對於初學者來說,好比天書一般,多看幾眼感覺都要走火入魔了。因此接下

基於MCMS用Java開發網站

上篇說到,將下載下來的mcms匯入 注意幾點: mcms預設編碼是utf-8 所以要將eclipse編碼格式統一修改為utf-8(包含jar) mcms 預設jdk1.7+ 由於jdk穩定版本有j

海康威視 web端開發經驗

  上篇部落格介紹了海康威視sdk以及web端的開發,成功預覽。還沒有成功的朋友可以去看一下上一篇文章   關於海康威視sdk與海康威視web的史上最精細的教程 (一) 但都是單個攝像頭,心裡總有個疑問,倆個攝像頭同時預覽該怎麼實現呢,經過和前端同時半天的探索,

併發程式設計concurrent 工具

併發程式設計(二)concurrent 工具類 一、CountDownLatch 經常用於監聽某些初始化操作,等初始化執行完畢後,通知主執行緒繼續工作。 import java.util.concurrent.CountDownLatch; public class CountDownLat

4. 首頁模組工具

上一節對歡迎模組進行了綜述(可參見 2. 歡迎模組 進行了解),接下來將從首頁模組開始詳細介紹: [首頁模組(一)之搭建伺服器] [首頁模組(二)之工具類] [首頁模組(三)之首頁] [首頁模組(四)之新聞詳情] [首頁模組(五)之Python學科]

【集合詳解】Java集合總結-常用集合對比

今天我們主要看一張圖。 圖是無意中在網上發現的,個人覺得非常好。(時間久了就忘了出處,請原創原諒~~) 我們還是從左到右分析。 ①所有的類都用到Iterator則說明所有的集合類都有遍歷集合的方法。 ②LinkedList除了繼承AbstractSe

Java 基礎語法 物件和

Java物件和類 概念 物件:物件是類的一個例項,有行為和狀態。 類:類是一個模板,它描述一類物件的行為和狀態。 類 一個類可以包含以下型別變數: 區域性變數:在方法、構造方法或者語句塊中定義的變數被稱為區域性變數。變數宣告和初始化都是在方法中,方法結束後,變

Spring 註解註解工具 AnnotationUtils 和 AnnotatedElementUtils

sso 構造 spring 註解 end on() lsm 編程 元素 bstr Spring 註解(二)註解工具類 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目錄(https://www.cnblogs.com/bi

Cocos2d-x學習筆記淺析動作CCAction(1)

Cocos2d-x的動作類CCAction並不是一個在螢幕中顯示的物件,動作必須要依託於CCNode類及其子類的例項才能發揮作用。CCAction繼承於物件類CCObject,有三個子類:有限時間動作、跟隨、移動速度,其中有限時間動作子類CCActionInterVal會形成動畫過程。

Java開發筆記十三陣列工具Arrays

陣列作為一種組合形式的資料型別,必然要求提供一些處理陣列的簡便辦法,包括陣列比較、陣列複製、陣列排序等等。為此Java專門設計了Arrays工具,該工具包含了幾個常用方法,方便程式設計師對陣列進行加工操作。Arrays工具的方法說明如下: Arrays.equals(a1, a2);

Java開發筆記十三數組工具Arrays

調整 數量 price 書店 nbsp 數組大小 -s highlight and 數組作為一種組合形式的數據類型,必然要求提供一些處理數組的簡便辦法,包括數組比較、數組復制、數組排序等等。為此Java專門設計了Arrays工具,該工具包含了幾個常用方法,方便程序員對數組進

Android 開發安卓常用5大布局方式

一、Android中常用的5大布局方式有以下幾種: 1.線性佈局(LinearLayout):按照垂直或者水平方向佈局的元件; 2.幀佈局(FrameLayout) :元件從螢幕左上方(0,0)佈局元件; 3.相對佈局 (RelativeLayout) :相對其它元件的佈

Java開發筆記一維陣列的用法

之前介紹的各類變數都是單獨宣告的,倘若要求定義相同型別的一組變數,則需定義許多同類型的變數,顯然耗時耗力且不宜維護。為此,程式語言引入了陣列的概念,每個陣列都由一組相同型別的資料構成,對外有統一的陣列名稱,對內通過序號區分每個資料元素。陣列型別由基本的變數型別擴充套件而來,在基本型別後面加上一對方括號,便形成

Java開發筆記十一維數組的擴展

賦值 如同 div 當前 完全 長度 例如 如何使用 說明 前面介紹的數組容納的是一串數字,仿佛一根線把這組數字串了起來,故而它只是一維數組。一維數組用來表示簡單的數列尚可,要是表達復雜的平面坐標系,那就力不從心了。由於平面坐標系存在水平和垂直兩個方向,因此可用二維數組來保

Java開發筆記十一維陣列的擴充套件

前面介紹的陣列容納的是一串數字,彷彿一根線把這組數字串了起來,故而它只是一維陣列。一維陣列用來表示簡單的數列尚可,要是表達複雜的平面座標系,那就力不從心了。由於平面座標系存在水平和垂直兩個方向,因此可用二維陣列來儲存平面座標系上的一組座標頂點,其中第一維是頂點佇列,第二維是頂點的橫縱座標。許多個平面組合起來變

Java開發筆記神奇的冒號

自增 while 點號 結束 默認 sim 作用 以及 簡單的 Java中的標點符號主要有兩類用途,一類是運算符,包括加號+、減號-、乘號*、除號/、取余號%、等號=、大於號>、小於號<、與號&、或號|、非號!、異或號^等等,另一類則是分隔符,包括區分代

Java開發筆記十五方法的輸入引數

前面通過main方法介紹了方法的定義形式,對於方法的輸入引數來說,還有幾個值得注意的地方,接下來分別對輸入引數的幾種用法進行闡述。一個方法可以有輸入引數,也可以沒有輸入引數,倘若無需輸入引數,則方法定義的圓括號內部直接留空。以列印當前時間為例,下面的showTime方法沒有輸入引數也能正常實現: /

Java開發筆記十六方法的輸出引數

前面介紹了方法的輸入引數,與輸入引數相對應的則為輸出引數,輸出引數也被稱作方法的返回值,意思是經過方法的處理最終得到的運算數值。這個返回值可能是整型數,也可能是雙精度數,也可能是陣列等其它型別,甚至允許不返回任何引數。與輸入引數類似,輸出引數也需要定義資料型別,它的返回值型別在方法名稱前面定義,具體位置參見方