Java MD5 加密 解密 工具類

2021-08-27 15:50:35 字數 2927 閱讀 3495

package com.accountmanagement.techzero.util;

public class md5helper

// rfc1321中定義的標準4*4矩陣的常量定義。

static final int s11 = 7, s12 = 12, s13 = 17, s14 = 22;

static final int s21 = 5, s22 = 9, s23 = 14, s24 = 20;

static final int s31 = 4, s32 = 11, s33 = 16, s34 = 23;

static final int s41 = 6, s42 = 10, s43 = 15, s44 = 21;

// 按rfc1321標準定義不可變byte型陣列padding

static final byte padding = ;

// md5計算過程中的3組核心資料,採用陣列形式存放

private long state = new long[4]; // 計算狀態(分別對應a b c d)

private byte buffer = new byte[64]; // 分配64個位元組私有緩衝區

private long count = new long[2]; // 位個數

// 最新一次計算結果的16進製制ascii字串表示,代表了16個字串形式的md5值

public string resultstr;

// 最新一次計算結果的2進製陣列表示,一共16個位元組,代表了128bit形式的md5值

public byte digest = new byte[16];

/*** 獲得兩次md5加密的字串

* @param str

* @return

*/public string gettwicemd5ofstring(string str)

/*** md5_encoding類提供的主要的介面函式ge***5ofstr,用來進行資料加密變換。呼叫其可對任意字串進行加密運算,並以字串形式返回加密結果。

* @param in

* @return

*/public string ge***5ofstr(string in)

return resultstr;

} // md5初始化函式.初始化核心變數.

private void md5init()

// 定義f g h i 為4個基數 ,即為4個基本的md5函式,進行簡單的位運算

private long f(long x, long y, long z)

private long g(long x, long y, long z)

private long h(long x, long y, long z)

private long i(long x, long y, long z)

// ff,gg,hh和ii呼叫f,g,h,i函式進行進一步變換

private long ff(long a, long b, long c, long d, long x, long s, long ac)

private long gg(long a, long b, long c, long d, long x, long s, long ac)

private long hh(long a, long b, long c, long d, long x, long s, long ac)

private long ii(long a, long b, long c, long d, long x, long s, long ac)

// md5的主計算過程,input是需要變換的二進位制位元組串,inputlen是長度

private void md5update(byte input, int inputlen)

index = 0;

} else

i = 0;

md5memcpy(buffer, input, index, i, inputlen - i);

} // 整理和填寫輸出結果,結果放到陣列digest中。

private void md5final()

// byte陣列的塊拷貝函式,將input陣列中的起始位置為inpos,長度len的資料拷貝到output陣列起始位置outpos處。

private void md5memcpy(byte output, byte input, int outpos, int inpos, int len)

// md5核心變換計算程式,由md5update函式呼叫,block是分塊的原始位元組陣列

private void md5transform(byte block)

// 把byte型資料轉換為無符號long型資料

private static long bytetoul(byte b)

// 把byte型別的資料轉換成十六進製制ascii字元表示

private static string bytetohex(byte in) ;

char out = new char[2];

out[0] = digitstr[(in >> 4) & 0x0f]; // 取高4位

out[1] = digitstr[in & 0x0f]; // 取低4位

string s = new string(out);

return s;

} // 將long型陣列按順序拆成byte型陣列,長度為len

private void encode(byte output, long input, int len)

} // 將byte型陣列按順序合成long型陣列,長度為len

private void decode(long output, byte input, int len)

}

Java MD5 加密 解密 工具類

package com.accountmanagement.techzero.util public class md5helper rfc1321中定義的標準4 4矩陣的常量定義。static final int s11 7,s12 12,s13 17,s14 22 static final in...

java MD5加密工具類

public class md5util protected static messagedigest messagedigest null static catch nosuchalgorithmexception e public static string getfilemd5string f...

《Java MD5加密工具類》

一 開發背景 md5加密經常會用於重要資料傳遞時為了安全而對其加密。比如使用者帳號密碼 一些商業機密資料 重要的檔案等等。總的來說就是兩種弄個情況 字串加密 重要檔案加密。二 作 者 laizhen 建立日期 2017 06 11 描 述 md5加密工具類 public class md5utils...