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

📄 sha1prng.java

📁 kaffe是一个java虚拟机的源代码。里面包含了一些java例程和标准的java包。
💻 JAVA
字号:
/* * Java core library component. * * Copyright (c) 1999 *      Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. * * NB!!!! THIS DOES NOT ACTUALLY IMPLEMENT SHA1PRNG - it uses random and *        is a place holder. * */package kaffe.security.provider;import java.security.SecureRandomSpi;import java.util.Random;import java.security.SecureRandom;import java.security.MessageDigest;import java.security.SecureRandomSpi;import java.security.NoSuchAlgorithmException;public class SHA1PRNG	extends SecureRandomSpi{	private static final int SEED_SIZE = 20;	private static final int DATA_SIZE = 40;		private MessageDigest md;	private byte seed[] = new byte[SEED_SIZE];	private int seedPos = 0;	private byte data[] = new byte[DATA_SIZE];	private int dataPos = 0;		public SHA1PRNG()	{		try		{			byte digest[];						this.md = MessageDigest.getInstance("SHA-1");			new Random().nextBytes(this.seed);			digest = this.md.digest(this.data);			System.arraycopy(digest, 0, this.data, 0, SEED_SIZE);		}		catch(NoSuchAlgorithmException e)		{			e.printStackTrace();		}		catch(Throwable th)		{			th.printStackTrace();		}	}		protected void engineSetSeed(byte[] otherSeed)	{		try		{			int lpc;						for( lpc = 0; lpc < otherSeed.length; lpc++ )			{				this.seed[this.seedPos++ % SEED_SIZE] ^=					otherSeed[lpc];			}			this.seedPos %= SEED_SIZE;		}		catch(Throwable th)		{			th.printStackTrace();		}	}		protected void engineNextBytes(byte[] bytes)	{		if( bytes.length < (20 - this.dataPos) )		{			System.arraycopy(this.data, this.dataPos,					 bytes, 0,					 bytes.length);			this.dataPos += bytes.length;		}		else		{			int blen = bytes.length, bpos = 0;			int subLen, dataLen;			byte digest[];			while( bpos < blen )			{				subLen = blen - bpos;				dataLen = SEED_SIZE - this.dataPos;				if( dataLen < subLen )				{					subLen = dataLen;				}				System.arraycopy(this.data,						 this.dataPos,						 bytes,						 bpos,						 subLen);				bpos += subLen;				this.dataPos += subLen;				if( this.dataPos >= SEED_SIZE )				{					System.arraycopy(this.seed,							 0,							 this.data,							 SEED_SIZE,							 SEED_SIZE);					digest = this.md.digest(this.data);					System.arraycopy(digest,							 0,							 this.data,							 0,							 SEED_SIZE);					this.dataPos = 0;				}			}		}	}		protected byte[] engineGenerateSeed(int numBytes)	{		byte retval[] = new byte[numBytes];		this.engineNextBytes(retval);		return retval;	}	}

⌨️ 快捷键说明

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