JSP驗(yàn)證碼大全之?dāng)?shù)字驗(yàn)證碼(源碼)
《JSP驗(yàn)證碼大全之?dāng)?shù)字驗(yàn)證碼(源碼)》由會(huì)員分享,可在線閱讀,更多相關(guān)《JSP驗(yàn)證碼大全之?dāng)?shù)字驗(yàn)證碼(源碼)(12頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、文檔供參考,可復(fù)制、編制,期待您的好評(píng)與關(guān)注! ??驗(yàn)證碼應(yīng)用在各種場合中,十分廣泛,在多種多樣的系統(tǒng)或軟件中的新用戶帳戶注冊(cè)、用戶登錄、網(wǎng)站統(tǒng)一登陸或者用戶在網(wǎng)站發(fā)布信息模塊發(fā)布文章或內(nèi)容都添加的隨機(jī)碼功能,對(duì)用戶操作過程進(jìn)行一種驗(yàn)證,使用驗(yàn)證碼的目的就是為了避免網(wǎng)絡(luò)中的自動(dòng)注冊(cè)程序或者自動(dòng)發(fā)布程序的濫用。 驗(yàn)證碼的原理其實(shí)就是隨機(jī)選擇一些字符碼以將字符碼以圖片的形式展現(xiàn)在軟件驗(yàn)證界面或驗(yàn)證頁面上,當(dāng)用戶在進(jìn)行提交操作的同時(shí)需要將圖片上的驗(yàn)證碼輸入并同時(shí)提交,如果提交的字符驗(yàn)證碼與服務(wù)器session保存的字符碼相同,則認(rèn)為提交信息有效,否則拒絕提交。在使用驗(yàn)證碼過程中,為了避免自動(dòng)分
2、析程序解析圖片并獲得驗(yàn)證信息,通常需要在圖片上隨機(jī)生成一些干擾線或者將復(fù)雜的字符對(duì)圖片進(jìn)行扭曲模糊,從而增加了自動(dòng)識(shí)別程序分析驗(yàn)證圖片的難度。 ???JSP驗(yàn)證碼源碼大全將分別用幾個(gè)篇幅的內(nèi)容來介紹在JSP中幾種驗(yàn)證碼的實(shí)現(xiàn)源碼以及使用。 ???一、JSP中產(chǎn)生數(shù)字驗(yàn)證碼源碼??? ???數(shù)字驗(yàn)證碼是一種最常用的驗(yàn)證字符碼形式,以下為數(shù)字實(shí)現(xiàn)的JSP源碼:??? Num.jsp <%@?page?contentType="image/jpeg"?import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"?%> <
3、%! ????Color getRandColor(int?cc,int?bb) ????{ ????????Random random =?new?Random(); ????????if(fc>255) cc=255; ????????if(bc>255) bb=255; ????????int?r=cc+random.nextInt(bb-cc); ????????int?g=cc+random.nextInt(bb-cc); ????????int?b=cc+random.nextInt(bb-cc); ????????returnnew?Color(r,g,b);
4、 ????}?//獲取隨機(jī)顏色 %> <% ????response.setHeader("Pragma","No-cache"); ????response.setHeader("Cache-Control","no-cache"); ????response.setDateHeader("Expires", 0); ? ????int?width=80;?//定義驗(yàn)證碼圖片的長度 ????int?height=30;?//定義驗(yàn)證碼圖片的寬度 ????BufferedImage image =?new?BufferedImage(width,height,Buffer
5、edImage.TYPE_INT_RGB); ? ????Graphics g = image.getGraphics(); ? ????Random random =?new?Random(); ? ????g.setColor(getRandColor(200,250)); ????g.fillRect(0, 0, width, height); ? ????g.setFont(new?Font("Times New Roman",Font.PLAIN,18)); ????//定義字體形式 ? ????g.setColor(getRandColor(160,20
6、0)); ????for?(int?i=0;i<155;i++) ????{ ???????int?i_x = random.nextInt(width); ???????int?i_y = random.nextInt(height); ???????int?i_xl = random.nextInt(12); ???????int?i_yl = random.nextInt(12); ???????g.drawLine(i_x,i_y,i_x+i_xl,i_y+i_yl); ????} ????//用線條畫背景 ? ????String s_Rand=""; ?
7、???for?(int?i=0;i<4;i++) ????{ ???????String rand=String.valueOf(random.nextInt(10)); ???????s_Rand+=rand; ?????? ???????g.setColor(new?Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); ???????g.drawString(rand,13*i+6,16); ????} ????//產(chǎn)生4位隨機(jī)碼? ? ????session.se
8、tAttribute("rand",s_Rand); ????//將驗(yàn)證碼存入Session中 ? ????g.dispose(); ??? ????ImageIO.write(image,?"JPEG", response.getOutputStream()); ????//輸出驗(yàn)證圖片 ??? ????out.clear(); ????out = pageContext.pushBody(); ??? %> 接下來文章將介紹JSP中的中文驗(yàn)證碼、其他JAVA驗(yàn)證碼的實(shí)現(xiàn)以及對(duì)JSP中對(duì)驗(yàn)證碼的調(diào)用和使用的有關(guān)內(nèi)容,下一篇文章將介紹有關(guān)JSP中文驗(yàn)
9、證碼的源碼實(shí)現(xiàn)。 數(shù)字驗(yàn)證碼是一種最常用的驗(yàn)證字符碼形式,以下為數(shù)字實(shí)現(xiàn)的JSP源碼: Num.jsp <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int cc,int bb) { Random random = new Random(); if(fc>255) cc=255; if(bc>255) bb=255; int r=cc+random.nextI
10、nt(bb-cc); int g=cc+random.nextInt(bb-cc); int b=cc+random.nextInt(bb-cc); returnnew Color(r,g,b); } //獲取隨機(jī)顏色 %> <% response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); int width=80; //定義驗(yàn)證碼圖片的長度 int height=30; //定義
11、驗(yàn)證碼圖片的寬度 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); Random random = new Random(); g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); g.setFont(new Font("Times New Roman",Font.PLAIN,18)); //定義字體形式 g.setC
12、olor(getRandColor(160,200)); for (int i=0;i<155;i++) { int i_x = random.nextInt(width); int i_y = random.nextInt(height); int i_xl = random.nextInt(12); int i_yl = random.nextInt(12); g.drawLine(i_x,i_y,i_x+i_xl,i_y+i_yl); } //用線條畫背景 String s_Rand=""; for (int i=0;i<4;i++) { String rand
13、=String.valueOf(random.nextInt(10)); s_Rand+=rand; g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(rand,13*i+6,16); } //產(chǎn)生4位隨機(jī)碼 session.setAttribute("rand",s_Rand); //將驗(yàn)證碼存入Session中 g.dispose(); ImageIO.write(image, "JPEG", response.
14、getOutputStream());
//輸出驗(yàn)證圖片
out.clear();
out = pageContext.pushBody();
%>
MD5
中如何實(shí)現(xiàn)MD5加密
源碼
/**
* 類名: MD5Digest
* 說明: 用來進(jìn)行密碼加密的md5公用參數(shù)
* 編寫日期: 2001/03/05
* 修改者:
* 修改信息:
* @author edgarlo edgarlo@
* @version 1.0
*/
import java.security.Messa
15、geDigest; import java.security.NoSuchAlgorithmException; public class MD5Digest { private MessageDigest __md5 = null; private StringBuffer __digestBuffer = null; public MD5Digest() throws NoSuchAlgorithmException { __md5 = MessageDigest.getInstance("MD5");
16、__digestBuffer = new StringBuffer(); } public String md5crypt(String s) { __digestBuffer.setLength(0); byte abyte0[] = __md5.digest(s.getBytes()); for(int i = 0; i < abyte0.length; i++) __digestBuffer.append(toHex(abyte0)); return __digestBuf
17、fer.toString(); } public String toHex(byte one){ String HEX="0123456789ABCDEF"; char[] result=new char[2]; result[0]=HEX.charAt((one & 0xf0) >> 4); result[1]=HEX.charAt(one & 0x0f); String mm=new String(result); return mm; } } --------------------------------------------
18、------------------------------------ /************************************************ MD5 算法的Java Bean @author:Topcat Tuppin Last Modified:10,Mar,2001 *************************************************/ package beartool; import java.lang.reflect.*; /*************************************************
19、md5 類實(shí)現(xiàn)了RSA Data Security, Inc.在提交給IETF 的RFC1321中的MD5 message-digest 算法。 *************************************************/ public class MD5 { /* 下面這些S11-S44實(shí)際上是一個(gè)4*4的矩陣,在原始的C實(shí)現(xiàn)中是用#define 實(shí)現(xiàn)的, 這里把它們實(shí)現(xiàn)成為static final是表示了只讀,切能在同一個(gè)進(jìn)程空間內(nèi)的多個(gè) Instance間共享*/ static final int S11 = 7; static
20、final int S12 = 12; static final int S13 = 17; static final int S14 = 22; static final int S21 = 5; static final int S22 = 9; static final int S23 = 14; static final int S24 = 20; static final int S31 = 4; static final int S32 = 11;
21、 static final int S33 = 16; static final int S34 = 23; static final int S41 = 6; static final int S42 = 10; static final int S43 = 15; static final int S44 = 21; static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22、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 }; /* 下面的三個(gè)成員是MD5計(jì)算過程中用到的3個(gè)核心數(shù)據(jù),在原始的C實(shí)現(xiàn)中 被定義到MD5_CTX結(jié)構(gòu)中 */ private long[] state = new lon
23、g[4]; // state (ABCD) private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb first) private byte[] buffer = new byte[64]; // input buffer /* digestHexStr是MD5的唯一一個(gè)公共成員,是最新一次計(jì)算結(jié)果的 16進(jìn)制ASCII表示. */ public String digestHexStr; /* dige
24、st,是最新一次計(jì)算結(jié)果的2進(jìn)制內(nèi)部表示,表示128bit的MD5值. */ private byte[] digest = new byte[16]; /* getMD5ofStr是類MD5最主要的公共方法,入口參數(shù)是你想要進(jìn)行MD5變換的字符串 返回的是變換完的結(jié)果,這個(gè)結(jié)果是從公共成員digestHexStr取得的. */ public String getMD5ofStr(String inbuf) { md5Init(); md5Update(inbuf.getBytes
25、(), inbuf.length()); md5Final(); digestHexStr = ""; for (int i = 0; i < 16; i++) { digestHexStr += byteHEX(digest); } return digestHexStr; } // 這是MD5這個(gè)類的標(biāo)準(zhǔn)構(gòu)造函數(shù),JavaBean要求有一個(gè)public
26、的并且沒有參數(shù)的構(gòu)造函數(shù) public MD5() { md5Init(); return; } /* md5Init是一個(gè)初始化函數(shù),初始化核心變量,裝入標(biāo)準(zhǔn)的幻數(shù) */ private void md5Init() { count[0] = 0L; count[1] = 0L; ///* Load magic initialization con
27、stants. state[0] = 0x67452301L; state[1] = 0xefcdab89L; state[2] = 0x98badcfeL; state[3] = 0x10325476L; return; } /* F, G, H ,I 是4個(gè)基本的MD5函數(shù),在原始的MD5的C實(shí)現(xiàn)中,由于它們是 簡單的位運(yùn)算,可能出于效率的考慮把它們實(shí)現(xiàn)成了宏,在java中,我們把
28、它們 實(shí)現(xiàn)成了private方法,名字保持了原來C中的。 */ private long F(long x, long y, long z) { 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) {
29、 return x ^ y ^ z; } private long I(long x, long y, long z) { return y ^ (x | (~z)); } /* FF,GG,HH和II將調(diào)用F,G,H,I進(jìn)行近一步變換 FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separat
30、e from addition to prevent recomputation. */ 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)); a += b; ret
31、urn 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)); a += b; return a; } private lon
32、g 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)); a += b; return a; } private long II(long a, long b, long c, long d,
33、long x, long s, long ac) { a += I (b, c, d) + x + ac; a = ((int) a << s) | ((int) a >>> (32 - s)); a += b; return a; } /* md5Update是MD5的主計(jì)算過程,inbuf是要變換的字節(jié)串,inputlen是長度,這個(gè) 函數(shù)由getMD5ofStr調(diào)用,
34、調(diào)用之前需要調(diào)用md5init,因此把它設(shè)計(jì)成private的 */ private void md5Update(byte[] inbuf, int inputLen) { int i, index, partLen; byte[] block = new byte[64]; index = (int)(count[0] >>> 3) & 0x3F; // /* Update number of bits */
35、 if ((count[0] += (inputLen << 3)) < (inputLen << 3)) count[1]++; count[1] += (inputLen >>> 29); partLen = 64 - index; // Transform as many times as possible. if (inputLen >= partLen) {
36、 md5Memcpy(buffer, inbuf, index, 0, partLen); md5Transform(buffer); for (i = partLen; i + 63 < inputLen; i += 64) { md5Memcpy(block, inbuf, 0, i, 64); md5Transform (block);
37、 } index = 0; } else i = 0; ///* Buffer remaining input */ md5Memcpy(buffer, inbuf, index, i, inputLen - i); } /* md5Final整理和填寫輸出結(jié)果 */
38、private void md5Final () { byte[] bits = new byte[8]; int index, padLen; ///* Save number of bits */ Encode (bits, count, 8); ///* Pad out to 56 mod 64. index = (int)(count[0] >>> 3) & 0x3f;
39、 padLen = (index < 56) ? (56 - index) : (120 - index); md5Update (PADDING, padLen); ///* Append length (before padding) */ md5Update(bits, 8); ///* Store state in digest */ Encode (digest, state, 16); }
40、 /* md5Memcpy是一個(gè)內(nèi)部使用的byte數(shù)組的塊拷貝函數(shù),從input的inpos開始把len長度的 字節(jié)拷貝到output的outpos位置開始 */ private void md5Memcpy (byte[] output, byte[] input, int outpos, int inpos, int len) { int i; for (i = 0; i < len; i++)
41、 output[outpos + i] = input[inpos + i]; } /* md5Transform是MD5核心變換程序,有md5Update調(diào)用,block是分塊的原始字節(jié) */ private void md5Transform (byte block[]) { long a = state[0], b = state[1], c = state[2], d = state[3];
42、 long[] x = new long[16]; Decode (x, block, 64); /* Round 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);
43、/* 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 */
44、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
45、[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, 0x49b
46、40821L); /* 16 */ /* Round 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]
47、, 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)
48、; /* 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 */
49、 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 */ /* Round
50、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 */
51、 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,
52、 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, 0xd9d
53、4d039L); /* 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 */ /* Round 4 */ a = II (a, b, c, d, x[0
54、], 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, 0x655b59c3
55、L); /* 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 */
56、 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 (
57、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] += a; state[1] += b; state[2] += c; sta
58、te[3] += d; } /*Encode把long數(shù)組按順序拆成byte數(shù)組,因?yàn)閖ava的long類型是64bit的, 只拆低32bit,以適應(yīng)原始C實(shí)現(xiàn)的用途 */ private void Encode (byte[] output, long[] input, int len) { int i, j; for (i = 0, j = 0; j < len; i++, j += 4) {
59、 output[j] = (byte)(input & 0xffL); output[j + 1] = (byte)((input >>> 8) & 0xffL); output[j + 2] = (byte)((input >>> 16) & 0xffL); output[j + 3] = (byte)((input >>> 24) & 0xffL); } } /*D
60、ecode把byte數(shù)組按順序合成成long數(shù)組,因?yàn)閖ava的long類型是64bit的, 只合成低32bit,高32bit清零,以適應(yīng)原始C實(shí)現(xiàn)的用途 */ private void Decode (long[] output, byte[] input, int len) { int i, j; for (i = 0, j = 0; j < len; i++, j += 4) output = b2iu(input[j])
61、 | (b2iu(input[j + 1]) << 8) | (b2iu(input[j + 2]) << 16) | (b2iu(input[j + 3]) << 24); return; } /* b2iu是我寫的一個(gè)把byte按照不考慮正負(fù)號(hào)的原則的”升位”程序,因?yàn)閖ava沒有unsigned運(yùn)算
62、 */ public static long b2iu(byte b) { return b < 0 ? b & 0x7F + 128 : b; } /*byteHEX(),用來把一個(gè)byte類型的數(shù)轉(zhuǎn)換成十六進(jìn)制的ASCII表示, 因?yàn)閖ava中的byte的toString無法實(shí)現(xiàn)這一點(diǎn),我們又沒有C語言中的 sprintf(outbuf,"%02X",ib) */ public static String byteHEX(byte ib) { c
63、har[] Digit = { '0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' }; char [] ob = new char[2]; ob[0] = Digit[(ib >>> 4) & 0X0F]; ob[1] = Digit[ib & 0X0F]; String s = new String(ob); return
64、s; } public static void main(String args[]) { MD5 m = new MD5(); if (Array.getLength(args) == 0) { //如果沒有參數(shù),執(zhí)行標(biāo)準(zhǔn)的Test Suite System.out.println("MD5 Test suite:"); System.out.println("MD5(\"\"
65、):"+m.getMD5ofStr("")); System.out.println("MD5(\"a\"):"+m.getMD5ofStr("a")); System.out.println("MD5(\"abc\"):"+m.getMD5ofStr("abc")); System.out.println("MD5(\"message digest\"):"+m.getMD5ofStr("message digest")); System.out.println("
66、MD5(\"abcdefghijklmnopqrstuvwxyz\"):"+ m.getMD5ofStr("abcdefghijklmnopqrstuvwxyz")); System.out.println("MD5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"):"+ m.getMD5ofStr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")); } else System.out.println("MD5(" + args[0] + ")=" + m.getMD5ofStr(args[0])); }
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告