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

📄 random.cpp

📁 加密解密,安全工具!很有意思的代码
💻 CPP
字号:
#include "random.h"#include "sha1.h"#include <stdlib.h>#include <string.h>char random_cpp[]="$Id: random.cpp,v 1.3 2002/10/29 07:11:46 crypt Rel-1.6-3 $";RNGRESULT SHA1RandomAllocate( sSHA1Random **sRandom ){	*sRandom = ( sSHA1Random * ) malloc( sizeof ( sSHA1Random ) );	if ( *sRandom == 0 )		return RNG_MALLOC_ERROR;	SHA1RandomInit( *sRandom );	return RNG_OK;}void SHA1RandomInit( sSHA1Random *sRandom ){	memset( sRandom , 0 , sizeof ( *sRandom ) );}void SHA1RandomUpdate(	sSHA1Random *sRandom ,	byte *seedBuffer ,	int seedBufferSize ){	SHA1Context *SHA_ctx;	SHA1Allocate( (void**)&SHA_ctx );	memset( sRandom , 0 , sizeof ( *sRandom ) );	SHA1Init( SHA_ctx , 0 , 0 );	SHA1Process( SHA_ctx , seedBuffer , seedBufferSize );	SHA1Final( SHA_ctx ,  sRandom->state );	SHA1Free( (void**)&SHA_ctx );    }////	SHA1RandomUpdateEx...//	Main difference is, it uses SHA1Process with current sRandom->state.//void SHA1RandomUpdateEx(	sSHA1Random *sRandom ,	byte *seedBuffer ,	int seedBufferSize ){	SHA1Context *SHA_ctx;	SHA1Allocate( (void**)&SHA_ctx );	SHA1Init( SHA_ctx , 0 , 0 );	SHA1Process( SHA_ctx , sRandom->state , sizeof( sRandom->state ) );	SHA1Process( SHA_ctx , seedBuffer , seedBufferSize );	SHA1Final( SHA_ctx ,  sRandom->state );	SHA1Free( (void**)&SHA_ctx );	}static void SHA1RandomReGenerate ( sSHA1Random *sRandom ){	int i;	SHA1Context *SHA_ctx;/* Generate new data */	SHA1Allocate( (void**)&SHA_ctx );	SHA1Init( SHA_ctx , 0 , 0 ); 	SHA1Process( SHA_ctx , sRandom->state , sizeof(sRandom->state) );	SHA1Final( SHA_ctx, sRandom->data ); /* FinalDigest array must be >= 20 bytes */	SHA1Free( (void**)&SHA_ctx );/* Increment current state */	for (i = sizeof(sRandom->state) ; i-- ; )		if (sRandom->state[i]++)			break;	sRandom->residue = sizeof( sRandom->data );}void SHA1RandomGenerateBytes(	sSHA1Random *sRandom,	unsigned char *buffer ,	unsigned int bufferSize){	while ( bufferSize > sRandom->residue )	{		memcpy( 			buffer ,			&( sRandom->data[ sizeof(sRandom->data) - sRandom->residue ] ),			sRandom->residue );		bufferSize	-= sRandom->residue;		buffer		+= sRandom->residue;		SHA1RandomReGenerate( sRandom );	}		memcpy( 		buffer ,		& ( sRandom->data[ sizeof(sRandom->data) - sRandom->residue ] ),		bufferSize );	sRandom->residue -= bufferSize;}void SHA1RandomFinal( sSHA1Random **sRandom ){	free( *sRandom );	*sRandom = 0;}extern "C" RNGRESULT SHA1RandomGenerate(	byte *byteBuffer ,	size_t byteBufferSize ,	byte *seedBuffer ,	size_t seedBufferSize ){	sSHA1Random *sRandom;	RNGRESULT result; 	result = SHA1RandomAllocate ( &sRandom );	if ( result != RNG_OK )		return result;	SHA1RandomInit( sRandom );	SHA1RandomUpdate( sRandom , seedBuffer , seedBufferSize );	SHA1RandomGenerateBytes( sRandom , byteBuffer , byteBufferSize );	SHA1RandomFinal ( &sRandom );	return RNG_OK;}void SHA1RandomGenerateBytesEx(	sSHA1Random *sRandom,	byte *buffer ,	size_t bufferSize,	byte *seedBuffer ,	size_t seedBufferSize ){	SHA1RandomUpdate( sRandom , seedBuffer , seedBufferSize );	while ( bufferSize > sRandom->residue )	{		memcpy( 			buffer ,			& ( sRandom->data[ sizeof(sRandom->data) - sRandom->residue ] ),			sRandom->residue );		bufferSize	-= sRandom->residue;		buffer		+= sRandom->residue;        SHA1RandomReGenerate( sRandom );		SHA1RandomUpdateEx( sRandom , seedBuffer , seedBufferSize );    }		memcpy( 		buffer ,		& ( sRandom->data[ sizeof(sRandom->data) - sRandom->residue ] ),		bufferSize );	sRandom->residue -= bufferSize;}////	Main difference in random generation is,//	SHA1RandomGenerateBytesEx does not use //		the SHA1RandomReGenerate ( the function simple increments sRandom->state ),//		SHA1RandomGenerateBytesEx processes current state first and //		then processes all seed again.extern "C" RNGRESULT SHA1RandomGenerateKey(	byte *byteBuffer ,	size_t byteBufferSize ,	byte *seedBuffer ,	size_t seedBufferSize ){	sSHA1Random *sRandom;	RNGRESULT result; 	result = SHA1RandomAllocate ( &sRandom );	if ( result != RNG_OK )		return result;	SHA1RandomInit( sRandom );	SHA1RandomGenerateBytesEx( sRandom , byteBuffer , byteBufferSize, seedBuffer , seedBufferSize  );	SHA1RandomFinal ( &sRandom );	return RNG_OK;}

⌨️ 快捷键说明

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