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

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

?? security.java

?? jsp數(shù)據(jù)庫系統(tǒng)
?? JAVA
字號(hào):
/*
   Copyright (C) 2002 MySQL AB

      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.

      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.

      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 */
package com.mysql.jdbc;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


/**
 * Methods for doing secure authentication with MySQL-4.1
 * and newer.
 *
 * @author Mark Matthews
 *
 * @version $Id: Security.java,v 1.1.4.4 2003/09/11 19:34:01 mmatthew Exp $
 */
class Security {
    private static final int SHA1_HASH_SIZE = 20;
    private static final char PVERSION41_CHAR = '*';

    /**
     * Prevent construction.
     */
    private Security() {
        super();
    }

    /*
      Convert password in salted form to binary string password and hash-salt
      For old password this involes one more hashing

      SYNOPSIS
            get_hash_and_password()
            salt         IN  Salt to convert from
            pversion     IN  Password version to use
            hash         OUT Store zero ended hash here
            bin_password OUT Store binary password here (no zero at the end)

      RETURN
            0 for pre 4.1 passwords
       !0 password version char for newer passwords
    */

    /**
     * DOCUMENT ME!
     *
     * @param salt DOCUMENT ME!
     * @param usingNewPasswords DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     *
     * @throws NoSuchAlgorithmException if the message digest 'SHA-1' is not
     * available.
     */
    static byte[] getBinaryPassword(int[] salt, boolean usingNewPasswords)
        throws NoSuchAlgorithmException {
        int val = 0;

        byte[] binaryPassword = new byte[SHA1_HASH_SIZE]; /* Binary password loop pointer */

        if (usingNewPasswords) /* New password version assumed */ {
            int pos = 0;

            for (int i = 0; i < 4; i++) /* Iterate over these elements*/ {
                val = salt[i];

                for (int t = 3; t >= 0; t--) {
                    binaryPassword[pos++] = (byte) (val & 255);
                    val >>= 8; /* Scroll 8 bits to get next part*/
                }
            }

            return binaryPassword;
        } else {
            int offset = 0;

            for (int i = 0; i < 2; i++) /* Iterate over these elements*/ {
                val = salt[i];

                for (int t = 3; t >= 0; t--) {
                    binaryPassword[t + offset] = (byte) (val % 256);
                    val >>= 8; /* Scroll 8 bits to get next part*/
                }

                offset += 4;
            }

            MessageDigest md = MessageDigest.getInstance("SHA-1");

            md.update(binaryPassword, 0, 8);

            return md.digest();
        }
    }

    /**
     * Creates key from old password to decode scramble
     * Used in 4.1 authentication with passwords stored
     * pre-4.1 hashing.
     *
     * @param passwd the password to create the key from
     *
     * @return 20 byte generated key
     *
     * @throws NoSuchAlgorithmException if the message digest 'SHA-1'
     *          is not available.
     */
    static byte[] createKeyFromOldPassword(String passwd)
        throws NoSuchAlgorithmException {
        /* At first hash password to the string stored in password */
        passwd = makeScrambledPassword(passwd);

        /* Now convert it to the salt form */
        int[] salt = getSaltFromPassword(passwd);

        /* Finally get hash and bin password from salt */
        return getBinaryPassword(salt, false);
    }

    /**
     * Creates password to be stored in user database
     * from raw string.
     *
     * Handles Pre-MySQL 4.1 passwords.
     *
     * @param password plaintext password
     *
     * @return scrambled password
     *
     * @throws NoSuchAlgorithmException if the message digest 'SHA-1' is not
     *          available.
     */
    static String makeScrambledPassword(String password)
        throws NoSuchAlgorithmException {
        long[] passwordHash = Util.newHash(password);
        StringBuffer scramble = new StringBuffer();

        scramble.append(longToHex(passwordHash[0]));
        scramble.append(longToHex(passwordHash[1]));

        return scramble.toString();
    }

    /**
     * Encrypt/Decrypt function used for password encryption in authentication
     *
     * Simple XOR is used here but it is OK as we crypt random strings
     *
     * @param from     IN     Data for encryption
     * @param to       OUT    Encrypt data to the buffer (may be the same)
     * @param password IN     Password used for encryption (same length)
     * @param length   IN     Length of data to encrypt
     */
    static void passwordCrypt(byte[] from, byte[] to, byte[] password,
        int length) {
        int pos = 0;

        while ((pos < from.length) && (pos < length)) {
            to[pos] = (byte) (from[pos] ^ password[pos]);
            pos++;
        }
    }

    /**
     * Stage one password hashing, used in MySQL 4.1 password handling
     *
     * @param password plaintext password
     *
     * @return stage one hash of password
     *
     * @throws NoSuchAlgorithmException if the message digest 'SHA-1' is not
     *          available.
     */
    static byte[] passwordHashStage1(String password)
        throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        StringBuffer cleansedPassword = new StringBuffer();

        int passwordLength = password.length();

        for (int i = 0; i < passwordLength; i++) {
            char c = password.charAt(i);

            if ((c == ' ') || (c == '\t')) {
                continue; /* skip space in password */
            }

            cleansedPassword.append(c);
        }

        return md.digest(cleansedPassword.toString().getBytes());
    }

    /**
     * Stage two password hashing used in MySQL 4.1
     * password handling
     *
     * @param hash from passwordHashStage1
     * @param salt salt used for stage two hashing
     *
     * @return result of stage two password hash
     *
     * @throws NoSuchAlgorithmException if the message digest 'SHA-1' is not
     * available.
     */
    static byte[] passwordHashStage2(byte[] hashedPassword, byte[] salt)
        throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");

        // hash 4 bytes of salt
        md.update(salt, 0, 4);

        md.update(hashedPassword, 0, SHA1_HASH_SIZE);

        return md.digest();
    }

    private static int[] getSaltFromPassword(String password) {
        int[] result = new int[6];

        if ((password == null) || (password.length() == 0)) {
            return result;
        }

        if (password.charAt(0) == PVERSION41_CHAR) {
            // new password
            String saltInHex = password.substring(1, 5);

            int val = 0;

            for (int i = 0; i < 4; i++) {
                val = (val << 4) + charVal(saltInHex.charAt(i));
            }

            return result;
        } else {
            int resultPos = 0;
            int pos = 0;
            int length = password.length();

            while (pos < length) {
                int val = 0;

                for (int i = 0; i < 8; i++) {
                    val = (val << 4) + charVal(password.charAt(pos++));
                }

                result[resultPos++] = val;
            }

            return result;
        }
    }

    /**
     * Returns hex value for given char
     */
    private static int charVal(char c) {
        return (int) (((c >= '0') && (c <= '9')) ? (c - '0')
                                                 : (((c >= 'A') && (c <= 'Z'))
        ? (c - 'A' + 10) : (c - 'a' + 10)));
    }

    private static String longToHex(long val) {
        String longHex = Long.toHexString(val);

        int length = longHex.length();

        if (length < 8) {
            int padding = 8 - length;
            StringBuffer buf = new StringBuffer();

            for (int i = 0; i < padding; i++) {
                buf.append("0");
            }

            buf.append(longHex);

            return buf.toString();
        } else {
            return longHex.substring(0, 8);
        }
    }

	//	SERVER:  public_seed=create_random_string()
		//			 send(public_seed)
		//
		//	CLIENT:  recv(public_seed)
		//			 hash_stage1=sha1("password")
		//			 hash_stage2=sha1(hash_stage1)
		//			 reply=xor(hash_stage1, sha1(public_seed,hash_stage2)
		//
		//			 // this three steps are done in scramble()
		//
		//			 send(reply)
		//
		//
		//	SERVER:  recv(reply)
		//			 hash_stage1=xor(reply, sha1(public_seed,hash_stage2))
		//			 candidate_hash2=sha1(hash_stage1)
		//			 check(candidate_hash2==hash_stage2)
		
	static byte[] scramble411(String password, String seed) throws NoSuchAlgorithmException {
		MessageDigest md = MessageDigest.getInstance("SHA-1");
		
		byte[] passwordHashStage1 = md.digest(password.getBytes());
		md.reset();
		byte[] passwordHashStage2 = md.digest(passwordHashStage1);
		md.reset();
		byte[] seedAsBytes = seed.getBytes(); // for debugging
		md.update(seedAsBytes);
		md.update(passwordHashStage2);
		
		byte[] toBeXord = md.digest();
		
		int numToXor = toBeXord.length;
		
		for (int i = 0; i < numToXor; i++) {
			toBeXord[i] = (byte)(toBeXord[i] ^ passwordHashStage1[i]);
		}
		
		return toBeXord;
		
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三在线| 美日韩一级片在线观看| 久久久青草青青国产亚洲免观| 欧美久久久久久久久久| 欧美中文字幕一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 不卡一区二区中文字幕| 粉嫩一区二区三区在线看| 成人教育av在线| 91在线观看免费视频| 一本大道久久a久久综合婷婷| 色婷婷av一区| 欧美日本免费一区二区三区| 在线成人小视频| 日韩视频在线一区二区| 久久综合九色综合97婷婷| 久久精品亚洲国产奇米99| 国产精品久久久久aaaa| 亚洲乱码国产乱码精品精的特点 | 久久欧美一区二区| 久久久av毛片精品| 一色屋精品亚洲香蕉网站| 亚洲一区二区三区中文字幕在线| 五月综合激情婷婷六月色窝| 激情深爱一区二区| k8久久久一区二区三区| 欧美日韩午夜在线| 久久久久成人黄色影片| 中文字幕欧美一区| 麻豆一区二区99久久久久| 国产高清视频一区| 欧美亚洲图片小说| 久久你懂得1024| 亚洲第一av色| 成人a免费在线看| 欧美绝品在线观看成人午夜影视| 欧美精品一区二区三区在线| 《视频一区视频二区| 青青草国产精品亚洲专区无| jizz一区二区| 日韩欧美中文一区二区| 中文字幕中文乱码欧美一区二区| 韩国av一区二区三区| 在线亚洲免费视频| 久久久青草青青国产亚洲免观| 亚洲国产成人精品视频| 国产成人免费网站| 欧美一区二区三区白人| 亚洲天天做日日做天天谢日日欢 | 亚洲精品国产一区二区三区四区在线 | 欧美视频精品在线| 国产精品人妖ts系列视频| 亚洲v日本v欧美v久久精品| 成人午夜伦理影院| 精品国产一区久久| 免费欧美高清视频| 欧美另类久久久品| 亚洲精品欧美在线| 99久久精品99国产精品| www成人在线观看| 热久久免费视频| 精品视频免费看| 亚洲一区二区不卡免费| 色综合夜色一区| 亚洲男人的天堂在线观看| 久久91精品久久久久久秒播| 在线不卡一区二区| 婷婷亚洲久悠悠色悠在线播放| 91亚洲精华国产精华精华液| 中文乱码免费一区二区| 丰满少妇在线播放bd日韩电影| 久久亚洲免费视频| 一本久久精品一区二区| 亚洲人精品一区| 色综合av在线| 一区二区三区日本| 欧洲av一区二区嗯嗯嗯啊| 亚洲午夜免费电影| 欧美麻豆精品久久久久久| 亚洲成人午夜影院| 欧美猛男超大videosgay| 日本成人在线看| 欧美tk丨vk视频| 国产精品性做久久久久久| 久久综合久久99| av电影天堂一区二区在线| 综合激情成人伊人| 欧美色视频在线观看| 亚洲成av人片| 欧美精品一区二区三区四区 | 国产精品白丝在线| 色噜噜狠狠成人网p站| 亚洲成人免费影院| 欧美一区国产二区| 国产福利一区二区三区视频| 国产精品久久久久影院亚瑟| 91丨九色丨尤物| 五月天视频一区| 久久九九全国免费| 91福利区一区二区三区| 日本欧美在线观看| 欧美国产一区视频在线观看| 91丨porny丨国产入口| 亚洲高清免费视频| 国产清纯白嫩初高生在线观看91| 99久久久精品免费观看国产蜜| 伊人色综合久久天天人手人婷| 欧美日韩久久久| 国产成人免费视| 亚洲一区二区欧美| 国产亚洲短视频| 欧美色视频在线观看| 国产大陆精品国产| 亚洲高清免费观看| 国产精品午夜在线观看| 欧美在线免费视屏| 国产精品91xxx| 五月天久久比比资源色| 中文一区二区完整视频在线观看| 欧美日韩一区中文字幕| 成人免费视频app| 精品夜夜嗨av一区二区三区| 一区二区三区四区在线| 国产亚洲精品中文字幕| 欧美一区二区播放| 色狠狠av一区二区三区| 国产成人av一区二区| 日韩精品一二三区| 亚洲综合在线视频| 国产精品理论在线观看| 精品国精品自拍自在线| 欧美日韩久久久一区| 色综合色综合色综合| 国产成人精品网址| 蜜臀av性久久久久av蜜臀妖精| 亚洲女爱视频在线| 中文字幕巨乱亚洲| 久久精品人人做人人综合| 日韩一区二区免费电影| 日本韩国精品一区二区在线观看| 成人开心网精品视频| 国产精品一区二区三区网站| 人人狠狠综合久久亚洲| 日韩精品欧美精品| 亚洲一区av在线| 夜夜精品视频一区二区 | 欧美一级国产精品| 欧美性猛交xxxx黑人交| 色综合色综合色综合| 91女神在线视频| 97se亚洲国产综合自在线不卡| 成人禁用看黄a在线| 成人久久18免费网站麻豆| 国产aⅴ精品一区二区三区色成熟| 国产乱对白刺激视频不卡| 激情六月婷婷久久| 国产一区二区三区免费看| 国产乱码精品1区2区3区| 国产精品系列在线播放| 国产成人8x视频一区二区| 国产精品一色哟哟哟| 国产精品一区二区91| 国产成人啪免费观看软件| 不卡av在线网| 在线免费av一区| 91精品国产入口| 久久只精品国产| 国产女主播在线一区二区| 亚洲天堂免费看| 一区二区视频免费在线观看| 午夜视频一区在线观看| 奇米精品一区二区三区在线观看| 免播放器亚洲一区| 成人一区二区视频| 在线一区二区三区四区五区| 欧美日本国产视频| 精品成人私密视频| 国产精品嫩草影院com| 一区二区在线观看视频| 青青草97国产精品免费观看 | 亚洲一区国产视频| 美女mm1313爽爽久久久蜜臀| 丁香啪啪综合成人亚洲小说 | 国产成人免费在线观看| 日本久久电影网| 欧美成人在线直播| 亚洲色图20p| 蜜桃av一区二区| 日本精品视频一区二区三区| 欧美不卡视频一区| 1区2区3区国产精品| 日本午夜一本久久久综合| 国产成人亚洲综合a∨婷婷| 在线观看欧美黄色| 久久久国产精华| 午夜精品久久久久久久久久| 国产成人免费在线| 欧美一区二区三区思思人| **性色生活片久久毛片| 久久99久久精品|