亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? md5_encoding.java

?? 用spring做的一個擁有添加
?? JAVA
字號:
package com.mvc.login;

import java.lang.*;
import java.math.*;

public class MD5_Encoding {      //實現數據加密
	static final int S11 = 7,S12 = 12,S13 = 17, S14 = 22;         //RFC1321中定義的標準4*4矩陣的常量定義
	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;
	
	static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      //按RFC1321標準定義不可變byte型數組PADDING
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0 };
	
	private long[] state = new long[4]; //計算狀態(分別對應a b c d)
	private byte[] buffer = new byte[64];   //分配64個字節私有緩沖區
	private long[] count = new long[2];     //位個數
	
	public String resultStr;    //最新一次計算結果的16進制ASCII字符串表示,代表了16個字符串形式的MD5值
	
	public byte[] digest = new byte[16];   //最新一次計算結果的2進制數組表示,一共16個字節,代表了128bit形式的MD5值
	
	public String getMD5ofStr(String in){    //進行數據加密變換
		md5Init();         // 初始化
		md5Update(in.getBytes(), in.length());// 調用MD5的主計算過程
		md5Final(); // 輸出結果到digest數組中
		for (int i = 0; i < 16; i++) {
			resultStr += byteToHEX(digest[i]); // 將digest數組中的每個byte型數據轉為16進制形式的字符串
		}
		return resultStr;
	}
	
	public MD5_Encoding() {         //構造函數,調用md5Init函數進行初始化工作
		md5Init();
		return;
	}
	
	private void md5Init() {        //初始化核心變量
		state[0] = 0x67452301L;  // 定義state為RFC1321中定義的標準幻數
		state[1] = 0xefcdab89L;  // 定義state為RFC1321中定義的標準幻數
		state[2] = 0x98badcfeL;  // 定義state為RFC1321中定義的標準幻數
		state[3] = 0x10325476L;  // 定義state為RFC1321中定義的標準幻數
		count[0] = count[1] =0L; // 初始化為0
		resultStr = "";// 初始化resultStr字符串為空
		for(int i=0;i<16;i++) digest[i]=0;//初始化digest數組元素為0
		return;
	}
	
	private long F(long x, long y, long z) {     //定義F G H I 為4個基數 ,即為4個基本的MD5函數,進行簡單的位運算
		return (x & y) | ((~x) & z);
	}

	private long G(long x, long y, long z) {
		return (x & z) | (y & (~z));
	}

	private long H(long x, long y, long z) {
		return x ^ y ^ z;
	}

	private long I(long x, long y, long z) {
		return y ^ (x | (~z));
	}
	
	private long FF(long a, long b, long c, long d, long x, long s, long ac) {   
		a += F(b, c, d) + x + ac;
		a = ((int) a << s) | ((int) a >>> (32 - s));  //這里long型數據右移時使用無符號右移運算符>>>
		a += b;
		return a;
	}
	
	private long GG(long a, long b, long c, long d, long x, long s, long ac) {
		a += G(b, c, d) + x + ac;
		a = ((int) a << s) | ((int) a >>> (32 - s)); //這里long型數據右移時使用無符號右移運算符>>>
		a += b;
		return a;
	}

	private long HH(long a, long b, long c, long d, long x, long s, long ac) {
		a += H(b, c, d) + x + ac;
		a = ((int) a << s) | ((int) a >>> (32 - s));//這里long型數據右移時使用無符號右移運算符>>>
		a += b;
		return a;
	}

	private long II(long a, long b, long c, long d, long x, long s, long ac) {
		a += I(b, c, d) + x + ac;
		a = ((int) a << s) | ((int) a >>> (32 - s));//這里long型數據右移時使用無符號右移運算符>>>
		a += b;
		return a;
	}
	
	private void md5Update(byte[] input, int inputLen) {    //MD5的主計算過程
		int i=0, index, partLen;
		byte[] block = new byte[64];   // 分配64個字節緩沖區
		//根據count計算index值。這里long型數據右移時使用無符號右移運算符>>>
		index = (int) (count[0] >>> 3) & 0x3F; 
		if ((count[0] += (inputLen << 3)) < (inputLen << 3))
			count[1]++;
		count[1] += (inputLen >>> 29);  //這里int型數據右移時使用無符號右移運算符>>>
		partLen = 64 - index;   //計算partLen值
		if (inputLen >= partLen) {
			md5Memcpy(buffer, input, index, 0, partLen);
			md5Transform(buffer);
			for (i = partLen; i + 63 < inputLen; i += 64) {
				md5Memcpy(block, input, 0, i, 64);
				md5Transform(block);
			}
			index = 0;
		} else
			i = 0;
		md5Memcpy(buffer, input, index, i, inputLen - i);
	}
	
	private void md5Final() {     //整理和填寫輸出結果

		byte[] bits = new byte[8];
		int index, padLen;
		Encode(bits, count, 8);
		index = (int) (count[0] >>> 3) & 0x3f; //這里long型數據右移時使用無符號右移運算符>>>
		padLen = (index < 56) ? (56 - index) : (120 - index);
		md5Update(PADDING, padLen);
		md5Update(bits, 8);
		Encode(digest, state, 16);
	}
	
	private void md5Memcpy(byte[] output, byte[] input, int outpos, int inpos, int len) {//byte數組的塊拷貝函數
		int i;
		for (i = 0; i < len; i++)
			output[outpos + i] = input[inpos + i];
	}
	
	private void md5Transform(byte block[]) {         // MD5核心變換計算程序
		long a = state[0], b = state[1], c = state[2], d = state[3];
		long[] x = new long[16]; 
		Decode(x, block, 64);  
        // 進行4級級聯運算
		// 第1級
		a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */
		d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */
		c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */
		b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */
		a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */
		d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */
		c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */
		b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */
		a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */
		d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */
		c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */
		b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */
		a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */
		d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */
		c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */
		b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */

		// 第2級
		a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */
		d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */
		c = GG(c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */
		b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */
		a = GG(a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */
		d = GG(d, a, b, c, x[10], S22, 0x2441453L); /* 22 */
		c = GG(c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */
		b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */
		a = GG(a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */
		d = GG(d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */
		c = GG(c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */
		b = GG(b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */
		a = GG(a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */
		d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */
		c = GG(c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */
		b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */

		// 第3級
		a = HH(a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */
		d = HH(d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */
		c = HH(c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */
		b = HH(b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */
		a = HH(a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */
		d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */
		c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */
		b = HH(b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */
		a = HH(a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */
		d = HH(d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */
		c = HH(c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */
		b = HH(b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */
		a = HH(a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */
		d = HH(d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */
		c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */
		b = HH(b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */

		// 第4級
		a = II(a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */
		d = II(d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */
		c = II(c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */
		b = II(b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */
		a = II(a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */
		d = II(d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */
		c = II(c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */
		b = II(b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */
		a = II(a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */
		d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */
		c = II(c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */
		b = II(b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */
		a = II(a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */
		d = II(d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */
		c = II(c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */
		b = II(b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */
		
		//分別累加到state[0],state[1],state[2],state[3]
		state[0] += a;  
		state[1] += b;
		state[2] += c;
		state[3] += d;
	}
	
	private static long byteToul(byte b) {    //把byte型數據轉換為無符號long型數據
		return b >0 ?b : ( b & 0x7F + 128);
	}
	
	private static String byteToHEX(byte in) {   //把byte類型的數據轉換成十六進制ASCII字符表示
		char[] DigitStr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
							'A', 'B', 'C', 'D', 'E', 'F' };
		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;
	}
	
	private void Encode(byte[] output, long[] input, int len) {   //將long型數組按順序拆成byte型數組,長度為len
		int i, j;
		for (i = 0, j = 0; j < len; i++, j += 4) {
			output[j] = (byte) (input[i] & 0xffL);
			output[j + 1] = (byte) ((input[i] >>> 8) & 0xffL);
			output[j + 2] = (byte) ((input[i] >>> 16) & 0xffL);
			output[j + 3] = (byte) ((input[i] >>> 24) & 0xffL);
		}
	}
	
	private void Decode(long[] output, byte[] input, int len) {    //將byte型數組按順序合成long型數組,長度為len
		int i, j;
		for (i = 0, j = 0; j < len; i++, j += 4)
			output[i] = byteToul(input[j]) 
					| (byteToul(input[j + 1]) << 8)
					| (byteToul(input[j + 2]) << 16)
					| (byteToul(input[j + 3]) << 24);
		return;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影视日本亚洲欧洲精品| 97久久超碰国产精品| 国产成人av福利| 色一情一伦一子一伦一区| 日韩免费在线观看| 亚洲一区二区三区四区的| 日韩电影免费一区| 色婷婷综合久久久| 久久久亚洲欧洲日产国码αv| 亚洲已满18点击进入久久| 国产成人一级电影| 精品国产一区二区三区久久影院| 亚洲男人的天堂在线观看| 国产精品综合av一区二区国产馆| 欧美影院精品一区| 国产色91在线| 九九视频精品免费| 91麻豆精品国产91久久久使用方法 | 一区二区三区.www| 成人sese在线| 国产欧美一区视频| 国产麻豆精品视频| 日韩欧美国产一区二区在线播放| 亚洲在线观看免费| 欧美亚洲综合网| 一区二区三区在线不卡| caoporm超碰国产精品| 国产三级精品在线| 国产伦精品一区二区三区免费迷| 91精品国产综合久久国产大片| 亚洲成人免费视| 欧美三级日韩三级国产三级| 亚洲蜜桃精久久久久久久| 6080国产精品一区二区| 亚洲乱码中文字幕| 91国偷自产一区二区使用方法| 国产精品欧美久久久久无广告 | 亚洲精品在线免费播放| 久久99热狠狠色一区二区| 日韩一级二级三级精品视频| 婷婷一区二区三区| 日韩美女视频在线| 国内外成人在线| 国产三级一区二区| 99久久精品国产网站| 一区二区三区日韩欧美精品| 欧美日韩午夜在线视频| 天堂成人免费av电影一区| 日韩限制级电影在线观看| 久草中文综合在线| 中文字幕精品在线不卡| 91丝袜高跟美女视频| 亚洲第一搞黄网站| 欧美成人女星排行榜| 国产福利一区二区三区视频| 国产精品久线在线观看| 精品视频资源站| 久久69国产一区二区蜜臀| 中文字幕第一区第二区| 色噜噜狠狠一区二区三区果冻| 亚洲观看高清完整版在线观看| 日韩一区二区三区精品视频| 国产盗摄一区二区| 亚洲最新在线观看| 日韩欧美另类在线| 盗摄精品av一区二区三区| 亚洲免费在线观看| 日韩视频在线观看一区二区| 成人黄色在线视频| 视频一区免费在线观看| 视频一区二区国产| 欧美激情一区二区三区| 在线亚洲免费视频| 国产一区二区美女诱惑| 亚洲裸体在线观看| 久久免费美女视频| 欧美综合天天夜夜久久| 国产一区美女在线| 亚洲bt欧美bt精品| 国产精品女同互慰在线看| 在线91免费看| 色哟哟国产精品| 成人黄色小视频| 精品一区二区三区免费观看| 亚洲小少妇裸体bbw| 国产欧美日韩另类视频免费观看| 欧美日韩国产一区| 91色porny| 国产成人综合亚洲91猫咪| 日韩电影在线观看电影| 亚洲综合一二区| 亚洲国产精品精华液2区45| 日韩精品中文字幕在线一区| 欧美曰成人黄网| av不卡一区二区三区| 极品少妇xxxx精品少妇偷拍| 伊人婷婷欧美激情| 国产精品久久久久久久久晋中 | 亚洲天堂av一区| 欧美一区午夜精品| 91麻豆免费看| 亚洲一区精品在线| 亚洲精品国产精华液| 国产亚洲欧美一区在线观看| 欧美无砖专区一中文字| 国产91对白在线观看九色| 日本va欧美va精品发布| 亚洲日本欧美天堂| 中文字幕亚洲欧美在线不卡| 欧美成人一区二区三区| 欧美日韩国产欧美日美国产精品| 成人性生交大片免费看中文| 精品亚洲porn| 国产一区二区三区黄视频| 亚洲福利一区二区| 亚洲精品免费看| 国产精品欧美一区喷水| 久久精品夜色噜噜亚洲a∨| 欧美裸体一区二区三区| 欧美日韩成人一区二区| 在线观看国产日韩| 91麻豆免费观看| 成人av网站大全| 成人精品在线视频观看| 婷婷开心激情综合| 麻豆成人在线观看| 丝袜亚洲另类欧美| 成人午夜激情片| 久久精品99久久久| 精品一区二区三区影院在线午夜| 日本不卡123| 精品午夜一区二区三区在线观看 | 制服丝袜成人动漫| 日韩你懂的在线观看| 欧美一区二区成人| 日韩欧美高清一区| 日韩欧美黄色影院| 欧美v亚洲v综合ⅴ国产v| 久久精品一区二区三区不卡| 国产日韩欧美高清在线| 欧美精彩视频一区二区三区| 欧美激情在线观看视频免费| 国产精品欧美久久久久无广告| 久久久久久久久久久黄色| 亚洲美女屁股眼交3| 亚洲午夜免费视频| 午夜国产精品一区| 男男gaygay亚洲| 精品一区二区免费视频| 色综合一个色综合| 日韩一区二区免费视频| 日韩一区二区麻豆国产| 精品久久久久久久一区二区蜜臀| 久久―日本道色综合久久| 国产午夜亚洲精品理论片色戒| 国产午夜精品一区二区| 亚洲一区二区欧美日韩| 秋霞午夜鲁丝一区二区老狼| 激情综合网激情| 不卡的电影网站| 欧美日韩黄色影视| 国产肉丝袜一区二区| 自拍偷拍欧美激情| 青草av.久久免费一区| 国产成人综合网| 欧美视频一区二区在线观看| 久久午夜色播影院免费高清| 欧美韩日一区二区三区四区| 中文字幕制服丝袜一区二区三区 | 国产人成亚洲第一网站在线播放 | 精品国产1区二区| 亚洲丝袜精品丝袜在线| 日韩av一区二区三区| 成人理论电影网| 一本在线高清不卡dvd| 久久精品网站免费观看| 亚洲图片欧美一区| 国产成人在线观看| 91精品国产综合久久久久久久| 久久综合九色综合97_久久久| 亚洲精品成人少妇| 国精品**一区二区三区在线蜜桃| 欧美日韩精品福利| 国产精品美女一区二区| 日日夜夜精品视频天天综合网| 成人福利电影精品一区二区在线观看| 欧美这里有精品| 亚洲日本丝袜连裤袜办公室| 国产精品一区久久久久| 91精品久久久久久久91蜜桃| 亚洲男人的天堂在线观看| 蜜臀va亚洲va欧美va天堂| 欧美精品成人一区二区三区四区| 国产精品欧美一区二区三区| 国内偷窥港台综合视频在线播放| 欧美三级欧美一级| 亚洲欧洲精品一区二区三区| 不卡一区二区三区四区| 国产亚洲欧美日韩俺去了| 久久er99精品|