<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
     
      1:清除sam文件:

      WinNT系列的系統(tǒng)賬戶信息是存在%systemroot%\system32\config\sam這個注冊表文件里的。 如果系統(tǒng)里沒有重要的賬戶,或者賬戶比較少,用刪除%systemroot%\system32\config\sam的方法是比較簡單的,不過因為系統(tǒng)會還原為只有administrator(密碼為空)和guest二個賬戶,所以有些程序因為它們所依賴的賬戶丟失了,如iis、vmware就不能啟動了。

       原來聽說這種方法只能適用于nt workstation系列(2kpro),不能用于server,我在2000professional和2000 advanced server上試驗都是成功的。不知道為什么會有上述說法,可能是活動目錄ad下不行吧。

       當(dāng)然首先你要能夠訪問系統(tǒng)分區(qū),來把sam文件改名或者刪除。如果是fat32、fat分區(qū),使用98啟動盤就行了。如果是ntfs分區(qū),可以使用winternal的ntfs for dos、ntfs for 98或者是支持ntfs的啟動光盤,再或者掛到其他win2000、linux等機器上,再再或者重新安裝一個新的win2000。   

      2:專用工具:

      windows管理員密碼丟失還有一個解決方法是使用Petter Nordahl-Hagen的The Offline NT Password Editor(http://home.eunet.no/~pnordahl/ntpasswd/),這個工具是離線修改注冊表文件sam來設(shè)置密碼的。需要用他的映像文件制作啟動盤來引導(dǎo),進而訪問ntfs分區(qū)重新設(shè)置密碼;雖然作者經(jīng)常更新他的程序,不過我還是會擔(dān)心他直接操作sam文件的安全性,可能有時會導(dǎo)致系統(tǒng)出錯。可能還有其他類似工具吧,恕我無知。

      3:還有一種想法就是用一個修改密碼的小程序來替換系統(tǒng)啟動的必要程序,然后系統(tǒng)啟動時就會替換密碼,隨后把被替換的程序在還原就行了。當(dāng)然首先你還是要能夠訪問系統(tǒng)分區(qū),來替換隨系統(tǒng)啟動的程序。   

      替換系統(tǒng)啟動的必要程序的一種方法是我寫的一個清除administrator密碼的小程序(CleanPwd:http://www.BingleSite.net/myprog/CleanPwd/CleanPwd.rar),他所作的就是把administrator密碼清空。使用方法如下:

      1):用雙系統(tǒng)或者啟動盤或者掛到別的系統(tǒng)上,如果是NTFS分區(qū)其他系統(tǒng)或啟動盤要能讀寫NTFS分區(qū),把windows安裝目錄下的system32\svchost.exe改名svchost.bak.exe備份,把CleanPwd.exe拷貝成svchost.exe。   

      2):啟動該系統(tǒng),就把administrator的密碼清空了,可以直接登陸。   

      3):把svchost.bak.exe 恢復(fù)就行了(如果使用替換的是svchost,最好再啟動rpc服務(wù))。為什么選用svchost.exe而不是其他程序,因為每個windows2000系統(tǒng)都有這幾個進程,System(kernel Executive and kernel)、smss(session manager)、csrss(win32 subsystem)、winlogon(logon process)、services(Service control manager)、lsass(local security authentication server ) 如果任何一個被殺掉或者出錯,系統(tǒng)將重新啟動。不過在lsass啟動之前你不能修改密碼,所以不能選用這幾個程序。

      另外系統(tǒng)中一般還有以下一些程序:svchost.exe(Remote Procedure Call (RPC) 還有其他一些服務(wù))、WBEM\WinMgmt.exe(Windows Management Instrumentation)、mstask.exe(Task Scheduler)、regsvc.exe(Remote Registry Service) 可能還有其他服務(wù)程序,你可能禁止了除RPC之外的其他服務(wù),但不會禁止rpc,否則系統(tǒng)工作就不正常了。所以我選擇了svchost,如果你知道其他服務(wù)會自動啟動,你也可以選擇它。當(dāng)然如果系統(tǒng)安裝了殺毒軟件的話,你替換殺毒軟件也可以,因為一般殺毒軟件都會在系統(tǒng)啟動是啟動殺毒防火墻來殺毒的。
    posted @ 2007-05-28 11:56 jadmin 閱讀(79) | 評論 (0)編輯 收藏

    ??????? 2007 年將是載入史冊的一年,Sun Microsystems 公司將于這一年在開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK),從而放棄了對 Java? 平臺的統(tǒng)馭,將權(quán)力交給了 Java 開發(fā)人員社區(qū)!在本文中,Java 開發(fā)人員 Elliotte Rusty Harold 從各個方面預(yù)測了 Java 平臺的新方向,從腳本到 bug 修復(fù)到新語法。

      2006 年又是 Java 平臺繁榮的一年。盡管遭遇了來自 Microsoft(C#)和腳本語言社區(qū)(Ruby)的沖擊,但 Java 語言仍然保持著其世界頭號編程語言的地位。同時,盡管 Java 6 的發(fā)布很值得慶祝,但比起宣布 Java 將在 GNU General Public License 下完全開源這一事件來說,卻不免有些黯然失色。Java 在 2007 年還能保持這種勢頭嗎?讓我們來看一下成敗的可能。

      Java 平臺將成為開源平臺

      2007 年上半年,Sun 將在一個開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK)。解除 JDK 的禁錮對于 Java 開發(fā)人員社區(qū)來說是巨大的一步,它將在今后的十年中推動 Java 平臺的發(fā)展。

      JDK 的質(zhì)量將會顯著改善,因為程序員們不再僅僅報告 bug 并開始修復(fù)。Java Developer Connection 的 bug 報告將會包括對 JDK 中的問題部分的詳細分析,并提供修復(fù)的補丁。正如Linus 法則 所陳述的那樣,“只要給予足夠的關(guān)注,任何 bug 都是顯而易見”,即調(diào)試是可并行進行的。優(yōu)化也是一樣。開源使兩者得以 并行。

      分支項目

      遺憾的是,設(shè)計并不是和調(diào)試、優(yōu)化一樣可以并行完成的。清潔的 API 有時也需要有一只獨裁的手。但獨裁者的缺點是:有時他們知道在做什么,有時卻不知道。意圖成為獨裁者的各方面之間的競爭往往是發(fā)現(xiàn)問題最佳解決方案的惟一方式。

      很少有公司能夠負擔(dān)得起這樣的代價,為一個產(chǎn)品開發(fā)多個獨立的實現(xiàn),以便在多個產(chǎn)品中選定保留一個而摒棄其余的產(chǎn)品,但開源社區(qū)卻在朝這個方向努力。所以,您會在 Java 平臺的各個層次中發(fā)現(xiàn)分支產(chǎn)品:語言、虛擬機和庫。大多數(shù)的分支產(chǎn)品會失敗,但這沒什么。好主意會脫穎而出。一些分支產(chǎn)品會一直存在下去,一些會重新并入標(biāo)準(zhǔn) JDK 中。明年的這個時候,分支產(chǎn)品與主流產(chǎn)品之間的差異也許不會很明顯,但這個過程會繼續(xù)下去。

      Sun 會在幾個月后發(fā)布 Java 7,Dolphin 的一個早期的 beta 版,以此作為開端。Sun 無法發(fā)布更早的 JDK 版本,因為存在一些只有在 Dolphin 中才能解決的構(gòu)建問題和許可協(xié)議問題。盡管如此,仍有望看到第三方著手進一步細分 Sun 的版本,來提供 Java 6、Java 5、Java 1.4,甚至更早版本的流行開源實現(xiàn)。

      早期的一些探尋分支產(chǎn)品的人們可能會侵犯 Sun 公司的商標(biāo),收到 Sun 的律師寄來的討厭的律師信。我們需要一個通用的未注冊為商標(biāo)的名字,讓所有人都能使用。我建議用 “J” —— 我希望沒人用單字母作商標(biāo)。

      開源項目從未消亡,只是有些褪色。就像之前的 Blackdown Project、GNU Classpath、Kaffe 和其他開源 JDK 項目一樣,他們的開發(fā)人員都轉(zhuǎn)向其他事情了。如果一個項目至今還沒有達到 1.0,那么恐怕以后永遠也達不到了。

      期待 Java 7

      Dolphin 不會在 2007 年發(fā)布。2008 年是更為現(xiàn)實的目標(biāo)。那就是說,工作尚在進行中,它的一些功能也許會作為早期的標(biāo)準(zhǔn)擴展或至少作為 beta 登場。

      遺憾的是,為一門語言添加功能遠比刪除功能要簡單得多。幾乎不可避免地,隨著時間的推移,語言不是朝著簡單的方向發(fā)展,而是越來越復(fù)雜,越來越讓人困惑。即使是那些單獨看起來很好的功能,在彼此疊加后也會出現(xiàn)問題。

      令人遺憾,Java 社區(qū)沒有接受這個教訓(xùn),盡管這種失敗并無特殊性。但總有一些太酷又太讓人激動的新語法令語言設(shè)計者難以抗拒 —— 即便這樣的新語法不能解決任何實際問題。于是對 Java 7 的新語言功能就有了巨大的要求,包括閉包、多繼承和操作符重載。

      我猜想在這一年結(jié)束前,會在 Java 7 beta 中看到閉包,也許還能看到操作符重載(有五成的把握),但不會出現(xiàn)多繼承。Java 中有太多東西是基于單個根的繼承層次。沒有可行的方式改進多繼承,使之適應(yīng)這門語言。

      目前有許多語法糖方面的提議,有一些有意義,有一些沒有。許多提議都專注于將像 getFoo() 這樣的方法替換為像 -> 這樣的操作符。

    posted @ 2007-05-28 01:51 jadmin 閱讀(45) | 評論 (0)編輯 收藏

    import java.lang.reflect.*;

    /*************************************************
    md5 類實現(xiàn)了RSA Data Security, Inc.在提交給IETF
    的RFC1321中的MD5 message-digest 算法。
    *************************************************/

    public class MD5
    {
    // 下面這些S11-S44實際上是一個4*4的矩陣,這樣寫是方便修改
    static final int S11 = 7;
    static 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;
    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, 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 };

    // 下面的三個成員是MD5計算過程中用到的3個核心數(shù)據(jù),在原始的C實現(xiàn)中
    // 被定義到MD5_CTX結(jié)構(gòu)中

    private long[] state = new long[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的唯一一個公共成員,是最新一次計算結(jié)果的
    //??? 16進制ASCII表示.

    public String digestHexStr;

    // digest,是最新一次計算結(jié)果的2進制內(nèi)部表示,表示128bit的MD5值.

    private byte[] digest = new byte[16];

    // getMD5ofStr是類MD5最主要的公共方法,入口參數(shù)是你想要進行MD5變換的字符串
    //??? 返回的是變換完的結(jié)果,這個結(jié)果是從公共成員digestHexStr取得的.
    ??
    public String getMD5ofStr(String inbuf)
    {
    ??? md5Init();
    ??? md5Update(inbuf.getBytes(), inbuf.length());
    ??? md5Final();
    ??? digestHexStr = "";
    ??? for (int i = 0; i < 16; i++)
    ??? {
    ???? digestHexStr += byteHEX(digest[i]);
    ??? }
    ??? return digestHexStr;
    }

    // 這是MD5這個類的標(biāo)準(zhǔn)構(gòu)造函數(shù),JavaBean要求有一個public的并且沒有參數(shù)的構(gòu)造函數(shù)
    public MD5()
    {
    ??? md5Init();
    ??? return;
    }

    // md5Init是一個初始化函數(shù),初始化核心變量,裝入標(biāo)準(zhǔn)的幻數(shù)

    private void md5Init()
    {
    ??? count[0] = 0L;
    ??? count[1] = 0L;
    ??? // Load magic initialization constants.

    ??? state[0] = 0x67452301L;
    ??? state[1] = 0xefcdab89L;
    ??? state[2] = 0x98badcfeL;
    ??? state[3] = 0x10325476L;

    ??? return;
    }

    // F, G, H ,I 是4個基本的MD5函數(shù),在原始的MD5的C實現(xiàn)中,由于它們是
    //??? 簡單的位運算,可能出于效率的考慮把它們實現(xiàn)成了宏,在java中,我們把它們
    // 實現(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) {
    ??? 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進行近一步變換

    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;
    ??? 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));
    ??? 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));
    ??? 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));
    ??? a += b;
    ??? return a;
    }

    // md5Update是MD5的主計算過程,inbuf是要變換的字節(jié)串,inputlen是長度,這個
    // 函數(shù)由getMD5ofStr調(diào)用,調(diào)用之前需要調(diào)用md5init,因此把它設(shè)計成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 */
    ??? 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) {
    ???? md5Memcpy(buffer, inbuf, index, 0, partLen);
    ???? md5Transform(buffer);

    ???? for (i = partLen; i + 63 < inputLen; i += 64) {

    ????? md5Memcpy(block, inbuf, 0, i, 64);
    ????? md5Transform (block);
    ???? }
    ???? index = 0;

    ??? } else
    ???? i = 0;

    ??? ///* Buffer remaining input */
    ??? md5Memcpy(buffer, inbuf, index, i, inputLen - i);
    }
    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;
    ??? 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);
    }

    // md5Memcpy是一個內(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++)
    ???? 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];
    ??? 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); /* 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 */

    ??? /* 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], 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 */

    ??? /* Round 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 */

    ??? /* Round 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] += a;
    ??? state[1] += b;
    ??? state[2] += c;
    ??? state[3] += d;
    }

    // Encode把long數(shù)組按順序拆成byte數(shù)組,因為java的long類型是64bit的,
    // 只拆低32bit,以適應(yīng)原始C實現(xiàn)的用途
    ??
    private void Encode (byte[] output, long[] input, int 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);
    ??? }
    }

    // Decode把byte數(shù)組按順序合成成long數(shù)組,因為java的long類型是64bit的,
    ??? //??? 只合成低32bit,高32bit清零,以適應(yīng)原始C實現(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[i] = b2iu(input[j]) |
    ????? (b2iu(input[j + 1]) << 8) |
    ????? (b2iu(input[j + 2]) << 16) |
    ????? (b2iu(input[j + 3]) << 24);

    ???? return;
    }

    // b2iu是一個把byte按照不考慮正負號的原則的"升位"程序,因為java沒有unsigned運算
    ??
    public static long b2iu(byte b) {
    ??? return b < 0 ? b & 0x7F + 128 : b;
    }

    // byteHEX(),用來把一個byte類型的數(shù)轉(zhuǎn)換成十六進制的ASCII表示,
    //???? 因為java中的byte的toString無法實現(xiàn)這一點,我們又沒有C語言中的
    //???? sprintf(outbuf,"%02X",ib)
    ??
    ??? public static String byteHEX(byte ib)
    {
    ???? char[] 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 s;
    }

    public static String toMD5(String source)
    {
    ??? MD5 md5 = new MD5();
    ??? return md5.getMD5ofStr(source);
    }

    public static void main(String[] args)
    {
    MD5 md5 = new MD5();
    System.out.println(md5.toMD5(args[0]));
    }
    }

    先編譯javac MD5.java,后帶字符串參數(shù)運行,如:java MD5 abc

    //結(jié)果生成 32位的加密字符串,有的實例中截取的是加密字串的 8--24位,長度為16位.

    posted @ 2007-05-28 01:41 jadmin 閱讀(66) | 評論 (0)編輯 收藏
    ???????? Java技術(shù)自問世時光已經(jīng)過去了9個年頭。作為一名一直關(guān)注其成長的記者,曾經(jīng)一段時間有過這樣的想法:“Java技術(shù)已經(jīng)成熟,是不是發(fā)展速度該放慢一些了呢”。然而,這種想法錯了。近來Java技術(shù)的進化相當(dāng)顯著。Java技術(shù)正在迎來“又一次革命”的風(fēng)暴。這就是本文的結(jié)論。

      “又一次”指的是什么?“革命”指的又是什么?光看結(jié)論的話肯定是一頭霧水。其實,筆者要講的并不是變化這樣一個事實,而是“促進變化的原動力”。是什么讓Java技術(shù)發(fā)生變化?讓我們從這一角度出發(fā),先看一下Java的變化歷程。

      Java正處于轉(zhuǎn)變期

      回顧Java技術(shù)的發(fā)展歷程,人們一定會感慨:2004年到2005年發(fā)生的變化如此之大,可以說“現(xiàn)在”正是Java技術(shù)的轉(zhuǎn)換期。 Java技術(shù)由編程語言(Java語言)、運行環(huán)境(JVM:Java虛擬機)、框架(Java API群)組成,目前在每一個層面上都發(fā)生著巨大的變化。

      (1)編程語言的變化

      Java語言標(biāo)準(zhǔn)出現(xiàn)明顯變化。在2004年9月發(fā)布的正式版本J2SE5.0(J2SE:Java2 Standard, Standard Edition,Java技術(shù)的核心運行環(huán)境)中,對Java語言標(biāo)準(zhǔn)中的Generics與元數(shù)據(jù)進行了大幅擴展。出現(xiàn)了被認為是“自Java問世以來的最大一次語言標(biāo)準(zhǔn)變化”(美國Sun Microsystems)。這次語言標(biāo)準(zhǔn)的變化給許多Java API帶來了影響。許多企業(yè)API的新版本都引入了基于元數(shù)據(jù)的注解(程序中記錄的附加信息),以較短的編碼記述更多的信息。

      (2)Java運行環(huán)境的變化

      在J2SE5.0中,大幅度強化了JVM的管理功能與實用性,換句話說就是具備了Java執(zhí)行OS(操作系統(tǒng))的特征。例如,原來在J2EE (Java2 Platform, Enterprise Edition,構(gòu)筑企業(yè)系統(tǒng)的Java技術(shù))領(lǐng)域,標(biāo)準(zhǔn)配備有作為管理功能的應(yīng)用軟件管理框架JMX。不僅如此,還配備有JVM自身監(jiān)控功能((JSR 174: Monitoring and Management Specification for the Java Virtual Machine)。在標(biāo)準(zhǔn)功能架構(gòu)中可以實時監(jiān)視JVM運行時的狀態(tài),也就是內(nèi)存使用量、線程狀態(tài)等。

      J2SE5.0中新追加的功能中包括并行處理實用程序(JSR 166),其基礎(chǔ)是紐約州立大學(xué)Doug Lea提供的程序庫。也就是說,標(biāo)準(zhǔn)規(guī)格中采用了來自民間的程序庫。

      (3)框架的變化

      服務(wù)器端的Java框架也發(fā)生了巨大變化。企業(yè)級Java技術(shù)--J2EE的“使用方法”說明文件“J2EE Blueprint”中,提出了將應(yīng)用軟件分為Web層、EJB層(Enterprise JavaBeans,將包括事務(wù)處理在內(nèi)的業(yè)務(wù)進程模塊化的框架)來構(gòu)筑的思路。這兩種層次都迎來了架構(gòu)更替時期。Web層的新框架為JSF (JavaServer Faces,將模塊組合起來構(gòu)筑Web應(yīng)用程序的框架),EJB層為標(biāo)準(zhǔn)方案中剛剛公布的下一代EJB規(guī)格“EJB3.0”。

      值得注意的是,促成框架發(fā)生變化的正是來自民間的源碼開放軟件。

      對JSF產(chǎn)生影響的是作為源碼開放的Web層框架得到普及的Apache Struts。JSF是對Struts的思路進行改進的產(chǎn)物,JSF的Spec Lead(規(guī)格制定領(lǐng)袖)之一Craig R. McClanahan就是Struts的作者。

    ??????? 對EJB3.0造成影響的也是民間源碼開放軟件。EJB3.0引入了DI(Dependency Injection,依賴注入)容器類(Container)與POJO(Plain Old Java Object)持久類這些新功能,大大減輕了編程的復(fù)雜性。這些概念因PicoContainer、Spring等源碼開放軟件的導(dǎo)入而引人注目。

      其背景在于用戶對“目前的EJB過于復(fù)雜”的批評。原本由EJB反對派提出的設(shè)計思想與源碼開放軟件,卻變成了EJB3.0的中心概念,顯出了巨大的影響力。

      (4)腳本語言

      在Java技術(shù)標(biāo)準(zhǔn)中新增加了編程語言Groovy(JSR 241)。這是一種可與Java語言無縫連接的腳本語言,有望以極短的程序完成相關(guān)處理。“在Java技術(shù)中添加Java以外的語言”,這聽起來也許有些別扭,其實以前就有這樣的呼聲,希望將可以充分利用Java技術(shù)資源的腳本作為語言使用。Groovy本來是源碼開放軟件,最終得到認可,被采納為標(biāo)準(zhǔn)規(guī)格。

      由上述可以看出,Java技術(shù)的構(gòu)成要素正在發(fā)生巨大變化。就在不久以前,一提起服務(wù)器Java,“Servlet、JSP、EJB是重要的 API”這樣的說明還占主流,但現(xiàn)在基于JSF和EJB3.0的應(yīng)用程序已經(jīng)變成了“面目全非”的程序。而在運行短程序或測試時,甚至還出現(xiàn)了不僅是 Java語言,連腳本語言都開始調(diào)用Java框架的情況。

      這些變化從大的方面來看的話,可以說是進一步發(fā)揮了Java面向?qū)ο蟮膬?yōu)勢。當(dāng)然,也包括提高開發(fā)效率、提高運行穩(wěn)定性、簡化運行管理等業(yè)務(wù)上的優(yōu)勢。

      開發(fā)者團體是真正的“變革推動者”

      那么,這些變化的原動力來自哪里呢?為什么說“目前”正面臨著“又一次變革”呢?理由如下:

      在Java技術(shù)的發(fā)展過程中,1999年到2000年是一個大的轉(zhuǎn)折點。J2EE概念于1999年出現(xiàn)。日本國內(nèi)的J2EE也在隨后2~3年內(nèi)得到正式普及,但這一技術(shù)體系早在5年前就已經(jīng)確立。在我們眼前,新一代Java技術(shù)的輪廓正逐漸顯現(xiàn)出來。

      JCP(Java Community Process)2.0于2000年問世。以會員制的組織形式推進Java技術(shù)的規(guī)格制訂、總體發(fā)展方向則以委員會的方式?jīng)Q定。從而形成了不依賴特定企業(yè)的規(guī)格制訂流程。這一組織形式歷經(jīng)近5年的時間,逐漸發(fā)展成“變革的推動者”。

      J2EE此前一直飽受批評,認為“Web層與EJB層的差距太大”、“EJB過于復(fù)雜”,但這也是因為這是一項實際使用的技術(shù)。JCP同樣也遇到很多批評,稱其“沒有完全公開”、“制定的技術(shù)標(biāo)準(zhǔn)卻不可思議地讓Sun擁有知識產(chǎn)權(quán)”,但JCP卻作為一個團體不斷發(fā)展壯大。

      直接推動Java技術(shù)變化的當(dāng)事者為5年前形成的基于團體的標(biāo)準(zhǔn)制訂流程--JCP,但真正將討論與技術(shù)納入JCP的卻是包括Java技術(shù)批評者在內(nèi)的眾多Java開發(fā)者團體。他們也是早期開展Java技術(shù)變革的先行者。由此誕生的下一代技術(shù)將會在2~3年后逐漸波及主流企業(yè)用戶。

      Java技術(shù)的“變革推動者”為開發(fā)者團體。不受制于特定企業(yè),通過眾多需要Java的開發(fā)者的建議,Java技術(shù)正在不斷發(fā)展進步。
    posted @ 2007-05-28 01:30 jadmin 閱讀(46) | 評論 (0)編輯 收藏

    import java.security.*;

    public class MD5 {

    ????? /**
    ????? * 字符串加密方法。傳入一個字符串,返回經(jīng)過<b>MD5</b>加密后的一個字符串
    ????? *?? @param?? strInput
    ????? *?? @return
    ?????? */
    ????? public??? static?? String encryptMD5(String strInput) {
    ???????? StringBuffer buf=null;
    ???????? try {
    ???????????? MessageDigest md = MessageDigest.getInstance("MD5");
    ???????????? md.update(strInput.getBytes());
    ???????????? byte b[] = md.digest();
    ????????????? buf = new StringBuffer(b.length * 2);
    ???????????? for(int i=0;i<b.length;i++) {
    ???????????????? if (((int)b[i] & 0xff) < 0x10) { // & 0xff轉(zhuǎn)換無符號整型
    ???????????????????? buf.append("0");
    ???????????????? }
    ??????????????? // buf.append(Long.toString((int) b[i] & 0xff, 16));//轉(zhuǎn)換16進制,下方法同
    ??????????????? buf.append(Long.toHexString((int)b[i] & 0xff));
    ???????????? }
    ???????? }catch(NoSuchAlgorithmException ex) {
    ????????????? ex.printStackTrace();
    ???????? }
    ??????? return buf.toString();
    ???? }

    ????? public??? static??? void?? main(String args[]) {
    ???????? String test?? =??? "abc" ;
    ???????? System.out.println(encryptMD5(test));
    ???? }
    }

    /**
    * 下面是一些測試數(shù)據(jù):
    *?? MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
    *
    *?? MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
    *
    *?? MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
    *
    *?? MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
    *
    *?? MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
    */

    posted @ 2007-05-28 01:24 jadmin 閱讀(51) | 評論 (0)編輯 收藏

    /* 主要使用的是java.util.Robot類來捕獲屏幕,
    * 可以實現(xiàn)對屏幕一個矩形區(qū)域的捕獲,通過這個類,
    * 我們也可以實現(xiàn)一個遠程桌面控制的程序
    */

    package com.qiu.util;
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.imageio.*;
    import java.io.*;


    public class ScreenCapture {
    //test main
    public static void main(String[] args) throws Exception{
    ?? String userdir = System.getProperty("user.dir");
    ?? File tempFile = new File("d:","temp.png");
    ?? ScreenCapture capture = ScreenCapture.getInstance();
    ?? capture.captureImage();??
    ?? JFrame frame = new JFrame();
    ?? JPanel panel = new JPanel();
    ?? panel.setLayout(new BorderLayout());
    ?? JLabel imagebox = new JLabel();
    ?? panel.add(BorderLayout.CENTER,imagebox);??
    ?? imagebox.setIcon(capture.getPickedIcon());
    ?? capture.saveToFile(tempFile);
    ?? capture.captureImage();
    ?? imagebox.setIcon(capture.getPickedIcon());
    ?? frame.setContentPane(panel);
    ?? frame.setSize(400,300);
    ?? frame.show();
    ?? System.out.println("Over");
    }

    private ScreenCapture() {
    ??
    ?? try{
    ??? robot = new Robot();
    ?? }
    ?? catch(AWTException e) {
    ??? System.err.println("Internal Error: " + e);
    ??? e.printStackTrace();
    ?? }??
    ?? JPanel cp = (JPanel)dialog.getContentPane();
    ?? cp.setLayout(new BorderLayout());??
    ?? labFullScreenImage.addMouseListener(new MouseAdapter() {
    ???? public void mouseReleased(MouseEvent evn) {
    ?????? isFirstPoint = true;
    ?????? pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH);
    ?????? dialog.setVisible(false);?????
    ???? }
    ??? });
    ???
    ?? labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {
    ???? public void mouseDragged(MouseEvent evn) {
    ????? if(isFirstPoint) {
    ?????? x1 = evn.getX();
    ?????? y1 = evn.getY();
    ?????? isFirstPoint = false;??
    ????? }
    ????? else {
    ?????? x2 = evn.getX();
    ?????? y2 = evn.getY();
    ?????? int maxX = Math.max(x1,x2);
    ?????? int maxY = Math.max(y1,y2);
    ?????? int minX = Math.min(x1,x2);
    ?????? int minY = Math.min(y1,y2);
    ?????? recX = minX;
    ?????? recY = minY;
    ?????? recW = maxX-minX;
    ?????? recH = maxY-minY;
    ?????? labFullScreenImage.drawRectangle(recX,recY,recW,recH);????
    ????? }
    ???? }
    ????
    ???? public void mouseMoved(MouseEvent e) {
    ????? labFullScreenImage.drawCross(e.getX(),e.getY());
    ???? }
    ??? });
    ???
    ?? cp.add(BorderLayout.CENTER,labFullScreenImage);
    ?? dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    ?? dialog.setAlwaysOnTop(true);
    ?? dialog.setMaximumSize(
    ??? Toolkit.getDefaultToolkit().getScreenSize());
    ?? dialog.setUndecorated(true);
    ?? dialog.setSize(dialog.getMaximumSize());
    ?? dialog.setModal(true);
    }
    //Singleton Pattern
    public static ScreenCapture getInstance() {
    ?? return defaultCapturer;
    }
    /**捕捉全屏慕*/
    public Icon captureFullScreen() {
    ?? fullScreenImage = robot.createScreenCapture(new Rectangle(
    ??? Toolkit.getDefaultToolkit().getScreenSize()));
    ?? ImageIcon icon = new ImageIcon(fullScreenImage);
    ?? return icon;
    }
    /**捕捉屏幕的一個矯形區(qū)域
    ?? */
    public void captureImage() {
    ?? fullScreenImage = robot.createScreenCapture(new Rectangle(
    ??? Toolkit.getDefaultToolkit().getScreenSize()));
    ?? ImageIcon icon = new ImageIcon(fullScreenImage);
    ?? labFullScreenImage.setIcon(icon);??
    ?? dialog.setVisible(true);
    }
    /**得到捕捉后的BufferedImage*/
    public BufferedImage getPickedImage() {
    ?? return pickedImage;
    }
    /**得到捕捉后的Icon*/
    public ImageIcon getPickedIcon() {
    ?? return new ImageIcon(getPickedImage());
    }
    /**儲存為一個文件,為PNG格式
    ??*@deprecated
    ?? *replaced by saveAsPNG(File file)
    ?? **/
    @Deprecated
    public void saveToFile(File file) throws IOException{
    ?? ImageIO.write(getPickedImage(),defaultImageFormater,file);
    }
    /**儲存為一個文件,為PNG格式*/
    public void saveAsPNG(File file) throws IOException {
    ?? ImageIO.write(getPickedImage(),"png",file);
    }
    /**儲存為一個JPEG格式圖像文件*/
    public void saveAsJPEG(File file) throws IOException {
    ?? ImageIO.write(getPickedImage(),"JPEG",file);
    }

    /**寫入一個OutputStream*/
    public void write(OutputStream out) throws IOException{
    ?? ImageIO.write(getPickedImage(),defaultImageFormater,out);
    }

    //singleton design pattern
    private static ScreenCapture defaultCapturer = new ScreenCapture();
    private int x1,y1,x2,y2;
    private int recX,recY,recH,recW; //截取的圖像
    private boolean isFirstPoint?? = true;
    private BackgroundImage labFullScreenImage = new BackgroundImage();
    private Robot robot;
    private BufferedImage fullScreenImage;
    private BufferedImage pickedImage;
    private String defaultImageFormater = "png";
    private JDialog dialog = new JDialog();
    }

    /**顯示圖片的Label*/
    class BackgroundImage extends JLabel{
    public void paintComponent(Graphics g) {
    ?? super.paintComponent(g);
    ?? g.drawRect(x,y,w,h);
    ?? String area = Integer.toString(w)+" * "+ Integer.toString(h);
    ?? g.drawString(area,x+(int)w/2-15,y+(int)h/2);
    ?? g.drawLine(lineX,0,lineX,getHeight());
    ?? g.drawLine(0,lineY,getWidth(),lineY);
    }

    public void drawRectangle(int x,int y,int width,int height) {
    ?? this.x = x;
    ?? this.y = y;
    ?? h = height;
    ?? w = width;
    ?? repaint();
    }

    public void drawCross(int x,int y) {
    ?? lineX = x;
    ?? lineY = y;
    ?? repaint();
    }

    int lineX,lineY;
    int x,y,h,w;
    }

    posted @ 2007-05-28 00:54 jadmin 閱讀(60) | 評論 (0)編輯 收藏

    import java.io.*;

    public class FileReadTest
    {
    public static void main(String[] args)
    {
    ?? FileReadTest t = new FileReadTest();
    ?? t.readMyFile();
    }
    void readMyFile()
    {
    ?? String temp = null;
    ?? int count = 0;
    ?? try
    ?? {
    ??? FileReader fr = new FileReader("mydata.txt");
    ??? BufferedReader br = new BufferedReader(fr);
    ??? temp = new String();
    ??? while((temp = br.readLine()) != null)
    ??? {
    ???? count++;
    ???? System.out.println(count + ":" + temp);
    ??? }
    ??? br.close();
    ??? fr.close();
    ?? }
    ?? catch(IOException e)
    ?? {
    ??? System.out.println("OH,got an IOException error!");
    ??? e.printStackTrace();
    ?? }
    }
    }

    posted @ 2007-05-28 00:32 jadmin 閱讀(53) | 評論 (0)編輯 收藏

    import java.io.*;

    public class FileInputDemo
    {
    public static void main(String[] args)
    {
    ?? try
    ?? {
    ??? FileInputStream f = new FileInputStream("mydata.txt");
    ??? DataInputStream in = new DataInputStream(f);
    ??? //BufferedReader br = new BufferedReader(new InputStreamReader(f));
    ??? while(in.available() != 0)
    ???? System.out.println(in.readLine());
    ???? /**
    ????? * DataInputStream.readLine()已經(jīng)過時
    ????? * 使用 DataInputStream 類讀取文本行的程序可以改為使用BufferedReader類
    ????? * 改用BufferedReader.readLine()方法
    ????? * 只要將以下形式的代碼:DataInputStream d = new DataInputStream(in);
    ????? * 替換為:BufferedReader d = new BufferedReader(new InputStreamReader(in));
    ????? */
    ??? in.close();
    ?? }
    ?? catch(Exception e)
    ?? {
    ??? System.err.println("File input error!");
    ?? }
    }
    }

    posted @ 2007-05-28 00:29 jadmin 閱讀(92) | 評論 (0)編輯 收藏


    import java.io.*;

    public class FileWriterTest
    {
    public static void main(String[] args)
    {
    ?? FileWriterTest t = new FileWriterTest();
    ?? t.WriteMyFile();
    }

    void WriteMyFile()
    {
    ?? try
    ?? {
    ??? FileWriter fw = new FileWriter("mydata.txt");
    ??? PrintWriter out =new PrintWriter(fw);
    ??? out.print("Hello,World!");
    ??? out.close();
    ??? fw.close();
    ?? }
    ?? catch(IOException e)
    ?? {
    ??? System.out.println("OH,got an IOException error!");
    ??? e.printStackTrace();
    ?? }
    }
    }

    posted @ 2007-05-28 00:28 jadmin 閱讀(54) | 評論 (0)編輯 收藏

    1


    //用FileOutputStream將內(nèi)容寫入文本文件

    import java.io.*;
    public class FileOutputDemo
    {
    public static void main(String[] args)
    {
    ?? FileOutputStream out;
    ?? PrintStream p;
    ?? try
    ?? {
    ??? out = new FileOutputStream("myfile.txt");
    ??? p = new PrintStream(out);
    ??? p.println("Hello,World!");
    ??? p.close();
    ?? }
    ?? catch(Exception e)
    ?? {
    ??? System.err.println("Error writing to file!");
    ?? }
    }

    }

    2

    import java.io.*;

    class FSODemo
    {
    ?? public static void main(String args[]) throws Exception
    ?? {
    ???? String source="Beijing is the capital of China\n"
    ???? +"and it is a very beautiful city.\n"
    ???? +"Welcome to Beijing!";
    ???? byte buf[] = source.getBytes();
    ???? FileOutputStream f=new FileOutputStream("file.txt");
    ???? f.write(buf);
    ???? f.close();
    ???? System.out.println("文本已經(jīng)成功寫入文件!");
    ?? }
    }

    posted @ 2007-05-28 00:27 jadmin 閱讀(360) | 評論 (0)編輯 收藏
    僅列出標(biāo)題
    共50頁: First 上一頁 39 40 41 42 43 44 45 46 47 下一頁 Last 
    主站蜘蛛池模板: 国产AV无码专区亚洲AV漫画| 毛片免费观看视频| 亚洲国产精品99久久久久久| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久国产精品萌白酱免费| 亚洲女人影院想要爱| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲成a人片77777老司机| 成人一a毛片免费视频| 美丽的姑娘免费观看在线播放| 精品特级一级毛片免费观看| 亚洲人成网站在线观看播放动漫| 亚洲中文字幕无码永久在线 | 久久久亚洲欧洲日产国码aⅴ | 99久久免费看国产精品| 国产一级高青免费| 成人无码视频97免费| 午夜成人无码福利免费视频| 最新亚洲人成网站在线观看 | 免费黄色毛片视频| 永久久久免费浮力影院| 可以免费观看一级毛片黄a | 久久国产乱子伦精品免费午夜 | 国产精品亚洲专区在线观看 | 在线亚洲精品福利网址导航| 国产精品亚洲玖玖玖在线观看| 亚洲精品无码久久久| 一本久久a久久精品亚洲| 久久久久久a亚洲欧洲aⅴ| 婷婷亚洲综合五月天小说| 亚洲国产高清在线精品一区| 亚洲综合一区二区三区四区五区 | 成人毛片免费播放| 亚洲无码精品浪潮| 亚洲美女视频网址| 亚洲精品乱码久久久久久蜜桃图片| 亚洲av永久无码精品秋霞电影秋 | h片在线观看免费| 日本妇人成熟免费中文字幕 | 黄色视屏在线免费播放| 1000部拍拍拍18勿入免费视频下载 |