⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 randoms.java

📁 aglet的部分源码
💻 JAVA
字号:
package com.ibm.aglets.security;/* * @(#)Randoms.java *  * IBM Confidential-Restricted *  * OCO Source Materials *  * 03L7246 (c) Copyright IBM Corp. 1996, 1998 *  * The source code for this program is not published or otherwise * divested of its trade secrets, irrespective of what has been * deposited with the U.S. Copyright Office. */import java.lang.Object;import java.util.Hashtable;import java.util.Calendar;import java.util.Date;import java.security.SecureRandom;/** * The <tt>Randoms</tt> class is a set of secure random number generators. *  * @version     1.00    $Date: 2001/07/28 06:33:13 $ * @author      ONO Kouichi */public class Randoms extends Object {	/**	 * The hash table for secure random number generator.	 */	private static Hashtable _secureTable = new Hashtable();	private static Hashtable _pseudoTable = new Hashtable();	/**	 * Use a secure random seed or an unsecure random seed	 */	private static boolean _useSecureRandomSeed = true;	/*	 * public static byte[] getPseudoSeed(int numOfBytes) {	 * final Calendar cal = Calendar.getInstance();	 * final Date time = cal.getTime();	 * final long mills = time.getTime();	 * final String str = Long.toString(mills);	 * final byte[] seq = str.getBytes();	 * byte[] seed = new byte[numOfBytes];	 * int i;	 * for(i=0; i<numOfBytes && i<seq.length; i++) {	 * seed[i] = seq[i];	 * }	 * return seed;	 * }	 */	/**	 * Returns the given number of pseudo seed bytes, computed with	 * Calendar's milliseconds value.	 * @return the given number of pseudo seed bytes	 */	public static byte[] getPseudoSeed(int length) {		byte b[] = new byte[length];		Object o[] = new Object[(int)(System.currentTimeMillis() & 0xFF)];		for (int i = 0; i < length; i++) {			b[i] = (byte)(System.currentTimeMillis() * 3);			long h = (new Object().hashCode() + System.currentTimeMillis()) 					 & 0xFF;			try {				Thread.currentThread().sleep(h);			} catch (InterruptedException ex) {}		} 		return b;	}	/**	 * Generates a random number for given length by	 * the secure random number generator.	 * @param length length of byte sequence to be generated	 * @param seq a byte sequence to which random number is copied	 */	public static synchronized void getRandom(int length, byte[] seq) {		SecureRandom random = getRandomGenerator(length);		if (random != null) {			random.nextBytes(seq);		} 	}	/**	 * Gets a secure random number generator for given length with seed.	 * If the secure random number generator is not stored in the hash table,	 * creates it and stores it into the table.	 * @param length length of byte sequence to be generated	 * @return secure random number generator for given length	 */	public static synchronized SecureRandom getRandomGenerator(int length) {		return getRandomGenerator(length, _useSecureRandomSeed);	}	/**	 * Gets a secure random number generator for given length with seed.	 * If the secure random number generator is not stored in the hash table,	 * creates it and stores it into the table.	 * @param length length of byte sequence to be generated	 * @param useSecureRandomSeed use a secure random seed if true,	 * or use an unsecure random seed otherwise.	 * @return secure random number generator for given length	 */	public static synchronized SecureRandom getRandomGenerator(int length, 			boolean useSecureRandomSeed) {		final Integer len = new Integer(length);		SecureRandom random = null;		Hashtable table = null;		if (useSecureRandomSeed) {			// Use a secure random seed			table = _secureTable;		} else {			// Use an unsecure random seed			table = _pseudoTable;		} 		Object obj = table.get(len);		if (obj != null && obj instanceof SecureRandom) {			random = (SecureRandom)obj;		} else {			random = new SecureRandom(getSeed(length, useSecureRandomSeed));			table.put(len, random);		} 		return random;	}	private static byte[] getSeed(int length) {		return getSeed(length, _useSecureRandomSeed);	}	private static byte[] getSeed(int length, boolean secure) {		if (!secure) {			System.out.print("(Using Pseudo Seed)");			return getPseudoSeed(length);		} else {			// SecureRandom.getSeed(length);			try {				System.out.print("(Using Secure Seed - SHA1PRNG)");				SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");				return sr.generateSeed(length);			} catch (java.security.NoSuchAlgorithmException nsae) {				System.out.print("[FAILED, use pseudo seed]");				return getPseudoSeed(length);			}		}	}	/**	 * Returns the use of secure/unsecure random seed.	 * @return use a secure random seed if true,	 * or use an unsecure random seed otherwise.	 */	public static boolean getUseSecureRandomSeed() {		return _useSecureRandomSeed;	}	/**	 * Sets the use of secure/unsecure random seed.	 * @param useSecureRandomSeed use a secure random seed if true,	 * or use an unsecure random seed otherwise.	 */	public static void setUseSecureRandomSeed(boolean useSecureRandomSeed) {		_useSecureRandomSeed = useSecureRandomSeed;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -