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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? blowfish.java

?? struts spring ibatis
?? JAVA
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/** * $RCSfile: Blowfish.java,v $ * $Revision: 1.3 $ * $Date: 2002/09/09 15:31:31 $ * * Adapted from Markus Hahn's Blowfish package so that all functionality is * in a single source file. Please visit the following URL for his excellent * package: http://members.tripod.com/markus_hahn/software.html * * Copyright (c) 1997-2002 Markus Hahn <markus_hahn@gmx.net> */package com.struts2.framework.util;import java.util.*;import java.security.*;/** * A class that provides easy Blowfish encryption.<p> * * @author Markus Hahn <markus_hahn@gmx.net> */public class Blowfish {    private BlowfishCBC m_bfish;    private static Random m_rndGen = new Random();    /**     * Creates a new Blowfish object using the specified key (oversized     * password will be cut).     *     * @param password the password (treated as a real unicode array)     */    public Blowfish(String password) {        // hash down the password to a 160bit key        MessageDigest digest = null;        try {            digest = MessageDigest.getInstance("SHA1");            digest.update(password.getBytes());        }        catch (Exception e) {                    }        // setup the encryptor (use a dummy IV)        m_bfish = new BlowfishCBC(digest.digest(), 0);        digest.reset();    }    /**     * Encrypts a string (treated in UNICODE) using the     * standard Java random generator, which isn't that     * great for creating IVs     *     * @param sPlainText string to encrypt     * @return encrypted string in binhex format     */    public String encryptString(String sPlainText) {        // get the IV        long lCBCIV;        synchronized (m_rndGen)        {            lCBCIV = m_rndGen.nextLong();        }        // map the call;        return encStr(sPlainText, lCBCIV);    }    // Internal routine for string encryption    private String encStr(String sPlainText,                          long lNewCBCIV)    {        // allocate the buffer (align to the next 8 byte border plus padding)        int nStrLen = sPlainText.length();        byte[] buf = new byte [((nStrLen << 1) & 0xfffffff8) + 8];        // copy all bytes of the string into the buffer (use network byte order)        int nI;        int nPos = 0;        for (nI = 0; nI < nStrLen; nI++)        {            char cActChar = sPlainText.charAt(nI);            buf[nPos++] = (byte) ((cActChar >> 8) & 0x0ff);            buf[nPos++] = (byte) (cActChar & 0x0ff) ;        }        // pad the rest with the PKCS5 scheme        byte bPadVal = (byte)(buf.length - (nStrLen << 1));        while (nPos < buf.length)        {            buf[nPos++] = bPadVal;        }        // create the encryptor        m_bfish.setCBCIV(lNewCBCIV);        // encrypt the buffer        m_bfish.encrypt(buf);        // return the binhex string        byte[] newCBCIV = new byte[BlowfishCBC.BLOCKSIZE];        longToByteArray(lNewCBCIV,                newCBCIV,                0);        return bytesToBinHex(newCBCIV, 0, BlowfishCBC.BLOCKSIZE) +                bytesToBinHex(buf, 0, buf.length);    }    /**     * decrypts a hexbin string (handling is case sensitive)     * @param sCipherText hexbin string to decrypt     * @return decrypted string (null equals an error)     */    public String decryptString(String sCipherText)    {        // get the number of estimated bytes in the string (cut off broken blocks)        int nLen = (sCipherText.length() >> 1) & ~7;        // does the given stuff make sense (at least the CBC IV)?        if (nLen < BlowfishECB.BLOCKSIZE)            return null;        // get the CBC IV        byte[] cbciv = new byte[BlowfishCBC.BLOCKSIZE];        int nNumOfBytes = binHexToBytes(sCipherText,                cbciv,                0,                0,                BlowfishCBC.BLOCKSIZE);        if (nNumOfBytes < BlowfishCBC.BLOCKSIZE)            return null;        // (got it)        m_bfish.setCBCIV(cbciv);        // something left to decrypt?        nLen -= BlowfishCBC.BLOCKSIZE;        if (nLen == 0)        {            return "";        }        // get all data bytes now        byte[] buf = new byte[nLen];        nNumOfBytes = binHexToBytes(sCipherText,                buf,                BlowfishCBC.BLOCKSIZE * 2,                0,                nLen);        // we cannot accept broken binhex sequences due to padding        // and decryption        if (nNumOfBytes < nLen)        {            return null;        }        // decrypt the buffer        m_bfish.decrypt(buf);        // get the last padding byte        int nPadByte = (int)buf[buf.length - 1] & 0x0ff;        // ( try to get all information if the padding doesn't seem to be correct)        if ((nPadByte > 8) || (nPadByte < 0))        {            nPadByte = 0;        }        // calculate the real size of this message        nNumOfBytes -= nPadByte;        if (nNumOfBytes < 0)        {            return "";        }        // success        return byteArrayToUNCString(buf, 0, nNumOfBytes);    }    /**     * destroys (clears) the encryption engine,     * after that the instance is not valid anymore     */    public void destroy()    {        m_bfish.cleanUp();    }    /**     * implementation of the Blowfish encryption algorithm in ECB mode     * @author Markus Hahn <markus_hahn@gmx.net>     * @version Feburary 14, 2001     */    private static class BlowfishECB    {        /** maximum possible key length */        public final static int MAXKEYLENGTH = 56;        /** block size of this cipher (in bytes) */        public final static int BLOCKSIZE = 8;        // size of the single boxes        final static int PBOX_ENTRIES = 18;        final static int SBOX_ENTRIES = 256;        // the boxes        int[] m_pbox;        int[] m_sbox1;        int[] m_sbox2;        int[] m_sbox3;        int[] m_sbox4;        /**         * default constructor         * @param bfkey key material, up to MAXKEYLENGTH bytes         */        public BlowfishECB(byte[] bfkey)        {            // create the boxes            int nI;            m_pbox = new int[PBOX_ENTRIES];            for (nI = 0; nI < PBOX_ENTRIES; nI++)            {                m_pbox[nI] = pbox_init[nI];            }            m_sbox1 = new int[SBOX_ENTRIES];            m_sbox2 = new int[SBOX_ENTRIES];            m_sbox3 = new int[SBOX_ENTRIES];            m_sbox4 = new int[SBOX_ENTRIES];            for (nI = 0; nI < SBOX_ENTRIES; nI++)            {                m_sbox1[nI] = sbox_init_1[nI];                m_sbox2[nI] = sbox_init_2[nI];                m_sbox3[nI] = sbox_init_3[nI];                m_sbox4[nI] = sbox_init_4[nI];            }            // xor the key over the p-boxes            int nLen = bfkey.length;            if (nLen == 0) return; // such a setup is also valid (zero key "encryption" is possible)            int nKeyPos = 0;            int nBuild = 0;            int nJ;            for (nI = 0; nI < PBOX_ENTRIES; nI++)            {                for (nJ = 0; nJ < 4; nJ++)                {                    nBuild = (nBuild << 8) | (((int) bfkey[nKeyPos]) & 0x0ff);                    if (++nKeyPos == nLen)                    {                        nKeyPos = 0;                    }                }                m_pbox[nI] ^= nBuild;            }            // encrypt all boxes with the all zero string            long lZero = 0;            // (same as above)            for (nI = 0; nI < PBOX_ENTRIES; nI += 2)            {                lZero = encryptBlock(lZero);                m_pbox[nI] = (int) (lZero >>> 32);                m_pbox[nI+1] = (int) (lZero & 0x0ffffffffL);            }            for (nI = 0; nI < SBOX_ENTRIES; nI += 2)            {                lZero = encryptBlock(lZero);                m_sbox1[nI] = (int) (lZero >>> 32);                m_sbox1[nI+1] = (int) (lZero & 0x0ffffffffL);            }            for (nI = 0; nI < SBOX_ENTRIES; nI += 2)            {                lZero = encryptBlock(lZero);                m_sbox2[nI] = (int) (lZero >>> 32);                m_sbox2[nI+1] = (int) (lZero & 0x0ffffffffL);            }            for (nI = 0; nI < SBOX_ENTRIES; nI += 2)            {                lZero = encryptBlock(lZero);                m_sbox3[nI] = (int) (lZero >>> 32);                m_sbox3[nI+1] = (int) (lZero & 0x0ffffffffL);            }            for (nI = 0; nI < SBOX_ENTRIES; nI += 2)            {                lZero = encryptBlock(lZero);                m_sbox4[nI] = (int) (lZero >>> 32);                m_sbox4[nI+1] = (int) (lZero & 0x0ffffffffL);            }        }        /**         * to clear data in the boxes before an instance is freed         */        public void cleanUp()        {            int nI;            for (nI = 0; nI < PBOX_ENTRIES; nI++)            {                m_pbox[nI] = 0;            }            for (nI = 0; nI < SBOX_ENTRIES; nI++)            {                m_sbox1[nI] = m_sbox2[nI] = m_sbox3[nI] = m_sbox4[nI] = 0;            }        }        /**         * selftest routine, to check e.g. for a valid class file transmission         * @return true: selftest passed / false: selftest failed         */        public static boolean selfTest()        {            // test vector #1 (checking for the "signed bug")            byte[] testKey1 = { (byte) 0x1c, (byte) 0x58, (byte) 0x7f, (byte) 0x1c,                                (byte) 0x13, (byte) 0x92, (byte) 0x4f, (byte) 0xef };            int[] tv_p1 = { 0x30553228, 0x6d6f295a };            int[] tv_c1 = { 0x55cb3774, 0xd13ef201 };            int[] tv_t1 = new int[2];            // test vector #2 (offical vector by Bruce Schneier)            String sTestKey2 = "Who is John Galt?";            byte[] testKey2 = sTestKey2.getBytes();            int[] tv_p2 = { 0xfedcba98, 0x76543210 };            int[] tv_c2 = { 0xcc91732b, 0x8022f684 };            int[] tv_t2 = new int[2];            // start the tests, check for a proper decryption, too            BlowfishECB testbf1 = new BlowfishECB(testKey1);            testbf1.encrypt(tv_p1, tv_t1);            if ((tv_t1[0] != tv_c1[0]) ||                    (tv_t1[1] != tv_c1[1]))            {                return false;            }            testbf1.decrypt(tv_t1);            if ((tv_t1[0] != tv_p1[0]) ||                    (tv_t1[1] != tv_p1[1]))            {                return false;            }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满白嫩尤物一区二区| 久久精品久久精品| 午夜天堂影视香蕉久久| 亚洲色图丝袜美腿| 天堂久久一区二区三区| 成人在线综合网站| 91麻豆精品国产| 欧美va日韩va| 三级久久三级久久久| jiyouzz国产精品久久| 884aa四虎影成人精品一区| 中文字幕在线观看不卡视频| 免费高清成人在线| 91精品国产综合久久婷婷香蕉| 国产偷国产偷精品高清尤物| 国产精品第四页| 蜜桃一区二区三区在线| 风流少妇一区二区| 国产视频在线观看一区二区三区| 亚洲成人动漫一区| 欧美日韩久久不卡| 中文字幕+乱码+中文字幕一区| 亚洲精选一二三| 色婷婷久久久综合中文字幕| 国产精品国产自产拍高清av| 国产91综合网| 国产女人18毛片水真多成人如厕 | 国产一区二区三区不卡在线观看| 国产在线视频不卡二| 日韩精品一区二区三区中文不卡 | 麻豆精品一区二区综合av| 欧美午夜精品免费| 国产精品白丝在线| 在线影院国内精品| 亚洲444eee在线观看| 欧美一级欧美三级| 成人妖精视频yjsp地址| 国产精品日韩精品欧美在线| 激情深爱一区二区| 国产精品久久久久久一区二区三区| 国产福利精品一区二区| 国产欧美日韩中文久久| 欧美性猛交xxxxxx富婆| 中文字幕久久午夜不卡| 麻豆91精品91久久久的内涵| 中国av一区二区三区| 欧美日本视频在线| 色一区在线观看| 国产成人av网站| 亚洲综合图片区| 亚洲国产精品成人综合色在线婷婷 | 在线视频你懂得一区二区三区| 国产精品中文字幕日韩精品| 麻豆精品国产传媒mv男同| 爽爽淫人综合网网站| 午夜久久久久久电影| 亚洲综合图片区| 日韩精品一级中文字幕精品视频免费观看 | 国产精品亚洲午夜一区二区三区 | 欧美三级日韩在线| aaa欧美大片| 偷拍自拍另类欧美| 亚洲你懂的在线视频| 一区二区不卡在线播放| 久久99精品国产麻豆婷婷| 99国产精品一区| 色综合天天综合给合国产| 国产伦精品一区二区三区在线观看| 国产精品不卡一区二区三区| 精品av综合导航| 国产精品美女久久久久久2018| 亚洲免费在线看| 色狠狠一区二区三区香蕉| 国产一区二区0| 日韩免费福利电影在线观看| 日韩电影网1区2区| 欧美精品久久一区| 奇米精品一区二区三区在线观看 | 亚洲高清中文字幕| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲欧洲99久久| 亚洲aaa精品| 成人黄色国产精品网站大全在线免费观看 | 国产精品视频一二三区| 国产精品欧美一区喷水| 天天操天天干天天综合网| 国产精品一区二区久久不卡| 国产成人鲁色资源国产91色综| 91精品国产91久久久久久一区二区 | 欧美成人精品福利| 欧美中文字幕一区| 制服丝袜中文字幕亚洲| 日韩美一区二区三区| 亚洲已满18点击进入久久| 99久久99久久精品国产片果冻| 欧美中文字幕一二三区视频| 国产午夜精品福利| 色综合咪咪久久| 中文字幕亚洲欧美在线不卡| 亚洲午夜久久久久久久久电影网| 欧美a级理论片| 久久国产综合精品| 日韩欧美久久久| 精品中文字幕一区二区| 日韩视频在线一区二区| 99精品久久99久久久久| 亚洲一区二区三区在线看 | 一区二区三区资源| 国产色产综合色产在线视频| 欧美日韩久久久一区| 色综合欧美在线视频区| 风间由美一区二区三区在线观看| 日本不卡中文字幕| 亚洲天堂中文字幕| 欧美日韩和欧美的一区二区| 视频一区二区欧美| 日韩欧美中文字幕精品| 激情伊人五月天久久综合| 国产精品久久久久久一区二区三区| 91精品麻豆日日躁夜夜躁| 国产福利一区二区三区视频在线| 一区二区三区自拍| 欧美国产精品久久| 欧美在线免费观看亚洲| 99精品欧美一区二区三区综合在线| 欧美一区二区成人6969| 亚洲国产精品久久人人爱蜜臀| 国产·精品毛片| 久久久久久久久久久久久久久99 | 国产美女视频一区| 欧美一区二区黄| 天堂av在线一区| 欧美一区二区三区视频在线观看| 亚洲高清免费在线| 欧美日韩在线三级| 偷拍一区二区三区| 欧美日韩中文字幕一区二区| 一区二区在线免费观看| 91黄色免费观看| 亚洲综合男人的天堂| 欧美揉bbbbb揉bbbbb| 亚洲一区二区三区中文字幕| 欧美色区777第一页| 夜夜爽夜夜爽精品视频| 欧美性大战久久久| 五月婷婷综合在线| 日韩精品一区在线观看| 激情小说欧美图片| 国产精品日日摸夜夜摸av| av欧美精品.com| 一区二区三区在线观看网站| 日本大香伊一区二区三区| 亚洲欧美一区二区三区孕妇| 成人av网址在线| 国产欧美一区二区精品性色超碰| 亚洲国产aⅴ成人精品无吗| 91麻豆精品久久久久蜜臀 | 国产欧美一区二区精品久导航 | 成人黄色a**站在线观看| 国产精品国产精品国产专区不片| 丰满亚洲少妇av| 国产精品伦理一区二区| 久久精工是国产品牌吗| 国产校园另类小说区| 成人a区在线观看| 亚洲欧洲制服丝袜| 国产精品一区二区久激情瑜伽 | 午夜视频在线观看一区二区三区| 91精品办公室少妇高潮对白| 亚洲人成影院在线观看| 日韩一级高清毛片| 国产一区二区电影| 国产精品国产a| 欧美在线观看视频一区二区三区| 欧美a一区二区| 国产视频一区在线播放| av成人动漫在线观看| 国产精品白丝在线| 欧美一区二区三区思思人 | 色婷婷精品久久二区二区蜜臀av| 亚洲日本乱码在线观看| 日韩色视频在线观看| 国产69精品一区二区亚洲孕妇| 一区精品在线播放| 91在线看国产| 日本美女视频一区二区| 国产婷婷色一区二区三区在线| 国产不卡视频在线播放| 欧美一级片在线观看| 成人动漫一区二区三区| 一区二区三区在线视频观看 | 视频一区二区三区在线| 久久精品视频在线免费观看| 成人午夜激情在线| 亚洲免费在线电影| 欧美裸体一区二区三区| 国产美女在线观看一区| 丝袜a∨在线一区二区三区不卡| 精品视频1区2区| 国产精品伊人色|