WJLHA算法1.0.1版本(C/C++)

WJLHA1.0.1版本源代碼,歡迎全球專業人士使用和破解。鄭重提醒:未經授權,嚴禁商用,用過MD5,SHA算法的朋友應該知道這個算法的價值。
WJLHA1.0.1算法的C源碼:
源代碼包括了WJLHA.h、WJLHA.c、main.c,歡迎測試。

頭文件:WJLHA.h

#pragma once
/******************************************************************************
傑林碼-散列算法
理論來源《傑林碼-加權概率模型單向散列函數》
代碼實現:王傑林
時間:2020.04.25
版本號:V1.0.1
******************************************************************************/
#ifndef _WJLHA_H
#define _WJLHA_H
/*****************************************************************************
散列函數
用法一,獨立編碼:適用於文件較小,調用時,直接將文件讀取到InBuFF中,然後調用下面的函數進行編碼。
用法二,流方式:適用於文件很大,將每次讀取文件的InBuFFLength - ByteLength個字節,InBuFF的某個位置起保存上一次比編碼後OutBuFF中的ByteLength個字節(如果是第一幀)於是將上一次得到字節數爲ByteLength的數據連同新讀取到的數據一併編碼成新的ByteLength個字節的數據
用法三,自適應流方式:在用法二的基礎上,每次運算使用不同的ByteLength,當每次使用的ByteLength已知,則增加了破解難度。
keyt 是密鑰,本散列算法支持用戶設定的編碼時的數字密鑰,通過加權概率模型權係數,將密鑰編碼到了每一個比特上,keyt = 0時無密鑰。
******************************************************************************/
unsigned char *WJLHA(
	unsigned char *InBuFF,                      // 輸入,等待編碼的字節緩存首地址(對於文件調用,請先將整個文件裝載到緩存中),可能包含了上一次編碼後UpBuFF中的數據
	unsigned int InBuFFLength,                  // 輸入,InBuFF的長度
	unsigned int keyt,                          // 輸入,編碼時的密鑰,密鑰是通過加權概率模型權係數,編碼到了每一個比特上,keyt = 0時無密鑰
	unsigned char *OutBuFF,                     // 輸入,上一次編碼後OutBuFF中的結果,長度爲ByteLength個字節
	unsigned int ByteLength                     // 輸入,用戶自定義輸出結果的字節長度,本函數做了限制,最大不小於128位(16個字節),理論上不封頂。
	);

#endif

C源:WJLHA.c

#include "WJLHA.h"
#include "math.h"
/*********************************************************************全局變量**********************************************************************/
// 每個字節中比特1的個數
static unsigned char CntOfOneSymbol[256]=
{
	0x00,0x01,0x01,0x02,0x01,0x02,0x02,0x03,0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04,
	0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04,0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,
	0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04,0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04,0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x07,
	0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04,0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x07,
	0x02,0x03,0x03,0x04,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,
	0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x07,
	0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x06,0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x07,
	0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x07,0x05,0x06,0x06,0x07,0x06,0x07,0x07,0x08
};

// 每個字節中各位置的比特值
static unsigned char bitOfByteTable[256][8]=
{
	{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,1},{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,1},{0,0,0,0,0,1,1,0},{0,0,0,0,0,1,1,1},	//0~7
	{0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,1},{0,0,0,0,1,1,0,0},{0,0,0,0,1,1,0,1},{0,0,0,0,1,1,1,0},{0,0,0,0,1,1,1,1},	//8~15	
	{0,0,0,1,0,0,0,0},{0,0,0,1,0,0,0,1},{0,0,0,1,0,0,1,0},{0,0,0,1,0,0,1,1},{0,0,0,1,0,1,0,0},{0,0,0,1,0,1,0,1},{0,0,0,1,0,1,1,0},{0,0,0,1,0,1,1,1},	//16~23
	{0,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,1},{0,0,0,1,1,0,1,0},{0,0,0,1,1,0,1,1},{0,0,0,1,1,1,0,0},{0,0,0,1,1,1,0,1},{0,0,0,1,1,1,1,0},{0,0,0,1,1,1,1,1},	//24~31
	{0,0,1,0,0,0,0,0},{0,0,1,0,0,0,0,1},{0,0,1,0,0,0,1,0},{0,0,1,0,0,0,1,1},{0,0,1,0,0,1,0,0},{0,0,1,0,0,1,0,1},{0,0,1,0,0,1,1,0},{0,0,1,0,0,1,1,1},	//32~39
	{0,0,1,0,1,0,0,0},{0,0,1,0,1,0,0,1},{0,0,1,0,1,0,1,0},{0,0,1,0,1,0,1,1},{0,0,1,0,1,1,0,0},{0,0,1,0,1,1,0,1},{0,0,1,0,1,1,1,0},{0,0,1,0,1,1,1,1},	//40~47
	{0,0,1,1,0,0,0,0},{0,0,1,1,0,0,0,1},{0,0,1,1,0,0,1,0},{0,0,1,1,0,0,1,1},{0,0,1,1,0,1,0,0},{0,0,1,1,0,1,0,1},{0,0,1,1,0,1,1,0},{0,0,1,1,0,1,1,1},	//48~55
	{0,0,1,1,1,0,0,0},{0,0,1,1,1,0,0,1},{0,0,1,1,1,0,1,0},{0,0,1,1,1,0,1,1},{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,1},{0,0,1,1,1,1,1,0},{0,0,1,1,1,1,1,1},	//56~63
	{0,1,0,0,0,0,0,0},{0,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,1},{0,1,0,0,0,1,0,0},{0,1,0,0,0,1,0,1},{0,1,0,0,0,1,1,0},{0,1,0,0,0,1,1,1},	//64~71
	{0,1,0,0,1,0,0,0},{0,1,0,0,1,0,0,1},{0,1,0,0,1,0,1,0},{0,1,0,0,1,0,1,1},{0,1,0,0,1,1,0,0},{0,1,0,0,1,1,0,1},{0,1,0,0,1,1,1,0},{0,1,0,0,1,1,1,1},	//72~79
	{0,1,0,1,0,0,0,0},{0,1,0,1,0,0,0,1},{0,1,0,1,0,0,1,0},{0,1,0,1,0,0,1,1},{0,1,0,1,0,1,0,0},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,1,0},{0,1,0,1,0,1,1,1},	//80~87
	{0,1,0,1,1,0,0,0},{0,1,0,1,1,0,0,1},{0,1,0,1,1,0,1,0},{0,1,0,1,1,0,1,1},{0,1,0,1,1,1,0,0},{0,1,0,1,1,1,0,1},{0,1,0,1,1,1,1,0},{0,1,0,1,1,1,1,1},	//88~95
	{0,1,1,0,0,0,0,0},{0,1,1,0,0,0,0,1},{0,1,1,0,0,0,1,0},{0,1,1,0,0,0,1,1},{0,1,1,0,0,1,0,0},{0,1,1,0,0,1,0,1},{0,1,1,0,0,1,1,0},{0,1,1,0,0,1,1,1},	//96~103
	{0,1,1,0,1,0,0,0},{0,1,1,0,1,0,0,1},{0,1,1,0,1,0,1,0},{0,1,1,0,1,0,1,1},{0,1,1,0,1,1,0,0},{0,1,1,0,1,1,0,1},{0,1,1,0,1,1,1,0},{0,1,1,0,1,1,1,1},	//104~111
	{0,1,1,1,0,0,0,0},{0,1,1,1,0,0,0,1},{0,1,1,1,0,0,1,0},{0,1,1,1,0,0,1,1},{0,1,1,1,0,1,0,0},{0,1,1,1,0,1,0,1},{0,1,1,1,0,1,1,0},{0,1,1,1,0,1,1,1},	//112~119
	{0,1,1,1,1,0,0,0},{0,1,1,1,1,0,0,1},{0,1,1,1,1,0,1,0},{0,1,1,1,1,0,1,1},{0,1,1,1,1,1,0,0},{0,1,1,1,1,1,0,1},{0,1,1,1,1,1,1,0},{0,1,1,1,1,1,1,1},	//120~127
	{1,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,1},{1,0,0,0,0,0,1,0},{1,0,0,0,0,0,1,1},{1,0,0,0,0,1,0,0},{1,0,0,0,0,1,0,1},{1,0,0,0,0,1,1,0},{1,0,0,0,0,1,1,1},	//128~135
	{1,0,0,0,1,0,0,0},{1,0,0,0,1,0,0,1},{1,0,0,0,1,0,1,0},{1,0,0,0,1,0,1,1},{1,0,0,0,1,1,0,0},{1,0,0,0,1,1,0,1},{1,0,0,0,1,1,1,0},{1,0,0,0,1,1,1,1},	//136~143
	{1,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,1},{1,0,0,1,0,0,1,0},{1,0,0,1,0,0,1,1},{1,0,0,1,0,1,0,0},{1,0,0,1,0,1,0,1},{1,0,0,1,0,1,1,0},{1,0,0,1,0,1,1,1},	//144~151
	{1,0,0,1,1,0,0,0},{1,0,0,1,1,0,0,1},{1,0,0,1,1,0,1,0},{1,0,0,1,1,0,1,1},{1,0,0,1,1,1,0,0},{1,0,0,1,1,1,0,1},{1,0,0,1,1,1,1,0},{1,0,0,1,1,1,1,1},	//152~159
	{1,0,1,0,0,0,0,0},{1,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0},{1,0,1,0,0,0,1,1},{1,0,1,0,0,1,0,0},{1,0,1,0,0,1,0,1},{1,0,1,0,0,1,1,0},{1,0,1,0,0,1,1,1},	//160~167
	{1,0,1,0,1,0,0,0},{1,0,1,0,1,0,0,1},{1,0,1,0,1,0,1,0},{1,0,1,0,1,0,1,1},{1,0,1,0,1,1,0,0},{1,0,1,0,1,1,0,1},{1,0,1,0,1,1,1,0},{1,0,1,0,1,1,1,1},	//168~175
	{1,0,1,1,0,0,0,0},{1,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,0},{1,0,1,1,0,0,1,1},{1,0,1,1,0,1,0,0},{1,0,1,1,0,1,0,1},{1,0,1,1,0,1,1,0},{1,0,1,1,0,1,1,1},	//176~183
	{1,0,1,1,1,0,0,0},{1,0,1,1,1,0,0,1},{1,0,1,1,1,0,1,0},{1,0,1,1,1,0,1,1},{1,0,1,1,1,1,0,0},{1,0,1,1,1,1,0,1},{1,0,1,1,1,1,1,0},{1,0,1,1,1,1,1,1},	//184~191
	{1,1,0,0,0,0,0,0},{1,1,0,0,0,0,0,1},{1,1,0,0,0,0,1,0},{1,1,0,0,0,0,1,1},{1,1,0,0,0,1,0,0},{1,1,0,0,0,1,0,1},{1,1,0,0,0,1,1,0},{1,1,0,0,0,1,1,1},	//192~199
	{1,1,0,0,1,0,0,0},{1,1,0,0,1,0,0,1},{1,1,0,0,1,0,1,0},{1,1,0,0,1,0,1,1},{1,1,0,0,1,1,0,0},{1,1,0,0,1,1,0,1},{1,1,0,0,1,1,1,0},{1,1,0,0,1,1,1,1},	//200~207
	{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,1},{1,1,0,1,0,0,1,0},{1,1,0,1,0,0,1,1},{1,1,0,1,0,1,0,0},{1,1,0,1,0,1,0,1},{1,1,0,1,0,1,1,0},{1,1,0,1,0,1,1,1},	//208~215
	{1,1,0,1,1,0,0,0},{1,1,0,1,1,0,0,1},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},{1,1,0,1,1,1,0,0},{1,1,0,1,1,1,0,1},{1,1,0,1,1,1,1,0},{1,1,0,1,1,1,1,1},	//216~223
	{1,1,1,0,0,0,0,0},{1,1,1,0,0,0,0,1},{1,1,1,0,0,0,1,0},{1,1,1,0,0,0,1,1},{1,1,1,0,0,1,0,0},{1,1,1,0,0,1,0,1},{1,1,1,0,0,1,1,0},{1,1,1,0,0,1,1,1},	//224~231
	{1,1,1,0,1,0,0,0},{1,1,1,0,1,0,0,1},{1,1,1,0,1,0,1,0},{1,1,1,0,1,0,1,1},{1,1,1,0,1,1,0,0},{1,1,1,0,1,1,0,1},{1,1,1,0,1,1,1,0},{1,1,1,0,1,1,1,1},	//232~239
	{1,1,1,1,0,0,0,0},{1,1,1,1,0,0,0,1},{1,1,1,1,0,0,1,0},{1,1,1,1,0,0,1,1},{1,1,1,1,0,1,0,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,1,0},{1,1,1,1,0,1,1,1},	//240~247
	{1,1,1,1,1,0,0,0},{1,1,1,1,1,0,0,1},{1,1,1,1,1,0,1,0},{1,1,1,1,1,0,1,1},{1,1,1,1,1,1,0,0},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,1}		//248~255
};
/*********************************************************************私有函數**********************************************************************/
// 爲了提高密鑰的有效作用,對密鑰進行一定的處理,並且返回變換後的係數
double ChangeKeyt(double JIELINCOEC, unsigned int keyt)
{
	if(keyt < 100000.0 && keyt > 0){
		JIELINCOEC = JIELINCOEC - (1.0 / ((double)keyt + 100000.0));
	}else if(keyt >= 100000.0){
		JIELINCOEC = JIELINCOEC - (1.0 / (double)keyt);
	}
	// 如果是爲0時,則直接返回當前計算的權係數
	return JIELINCOEC;
}
// 統計InBuFF中符號0的概率,並根據符號0的概率以及ByteLength得出傑林碼係數,此函數就是根據傑林碼理論所得
double GetJieLinCoeV(unsigned char *InBuFF, double *p0, double *p1, unsigned int InBuFFLength, unsigned int ByteLength)
{
	int i;
	double JIELINCOEC = 0.0;
	unsigned int realLength = 0;
	double Count1 = 0, CountAll = 0, H;
	// 首先是判斷InBuFFLength 是不是大於等於 3 * ByteLength
	CountAll = (double)InBuFFLength * 8;
	// 統計符號0的個數
	for(i = 0; i < InBuFFLength; ++i){
		Count1 += (double)CntOfOneSymbol[InBuFF[i]];
	}
	// 求出符號0的概率p0和符號1的概率p1
	*p1 = Count1 / CountAll;
	*p0 = 1.0 - *p1;
	// 全0或全1的二進制序列需要進行預處理
	if(*p1 == 0.0){
		*p1 = 0.001;
		*p0 = 1.0 - *p1;
	}else if(*p0 == 0.0){
		*p0 = 0.001;
		*p1 = 1.0 - *p0;
	}
	// 求出標準熵
	H = -*p0 * (log(*p0)/log(2.0))- *p1 * (log(*p1)/log(2.0));
	// 求出能編碼出比特長度爲ByteLength * 8的傑林碼係數,請參看我的理論《傑林碼-加權概率模型單向散列函數》中的公式(2-14)
	JIELINCOEC = pow( 2.0, H - ( (ByteLength - 4) * 8 ) / CountAll );
	// 返回
	return JIELINCOEC;
}

// 編碼輸出的字節信息
void WEOutPutEncode(unsigned char *EOut_buff,unsigned int *EOut_buff_loop, unsigned char ucByte)
{
	EOut_buff[ *EOut_buff_loop] = ucByte;
	*EOut_buff_loop = *EOut_buff_loop + 1;
}
// 核心編碼
void WEncode(unsigned char symbol, double p0, double p1, double JIELINCOE, unsigned int *EFLow, unsigned int *EFRange, unsigned int *EFDigits, unsigned int *EFFollow, unsigned char *EOut_buff,unsigned int *EOut_buff_loop)
{
	unsigned int High = 0,i = 0;
	// 根據加權概率模型理論,傑林碼係數作用於符號0和符號1的概率
	if (1 == symbol){// 符號1
		*EFLow += (unsigned int)((*EFRange) * p0);
		*EFRange = (unsigned int)( (*EFRange) * p1 );
	}else{
		*EFRange = (unsigned int)( (*EFRange) *  p0 );
	}
	*EFRange = (unsigned int)((double)(*EFRange) * JIELINCOE);
	// 根據區間編碼方式每次輸出一個編碼後的字節
	while(*EFRange <= 8388608){
		High = *EFLow + *EFRange - 1;
		if(*EFFollow != 0) {
			if (High <= 2147483648) {
				WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFDigits);
				for (i = 1; i <= *EFFollow - 1; ++i){
					WEOutPutEncode(EOut_buff, EOut_buff_loop, 0xFF);
				}
				*EFFollow = 0;
				*EFLow = *EFLow + 2147483648;
			}
			else if (*EFLow >= 2147483648) {
				WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFDigits + 1);
				for (i = 1; i <= *EFFollow - 1; ++i){
					WEOutPutEncode(EOut_buff, EOut_buff_loop, 0x00);
				}									
				*EFFollow = 0;
			} else {				
				*EFFollow = *EFFollow + 1;
				*EFLow = (*EFLow << 8) & 2147483647; 
				*EFRange = *EFRange << 8;
				continue;
			}
		}
		if (((*EFLow ^ High) & (0xFF << 23)) == 0) {
			WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFLow >> 23);
		}else{
			*EFLow = *EFLow - 2147483648;
			*EFDigits = *EFLow >> 23;
			*EFFollow = 1;
		}
		*EFLow = ( ( (*EFLow << 8) & 2147483647) | (*EFLow & 2147483648) );
		*EFRange = *EFRange << 8;
	}
}
// 結束編碼
void WFinishEncode(unsigned int *EFLow, unsigned int *EFRange, double *JIELINCOE, unsigned int *EFDigits, unsigned int *EFFollow, unsigned char *EOut_buff,unsigned int *EOut_buff_loop)
{
	int n = 0;
	if (*EFFollow != 0) {
		if (*EFLow < 2147483648) {
			WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFDigits);
			for (n = 1; n <= *EFFollow - 1; ++n)
				WEOutPutEncode(EOut_buff, EOut_buff_loop, 0xFF);
		} else {
			WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFDigits + 1);
			for (n = 1; n <= *EFFollow - 1; ++n)
				WEOutPutEncode(EOut_buff, EOut_buff_loop, 0x00);
		}
	}
	*EFLow = *EFLow << 1;
	n = 32;
	do {
		n -= 8;
		WEOutPutEncode(EOut_buff, EOut_buff_loop, *EFLow >> n);
	} while ( n > 0 );
}
// 最終的函數
unsigned char *WJLHA(
	unsigned char *InBuFF,                      // 輸入,等待編碼的字節緩存首地址(對於文件調用,請先將整個文件裝載到緩存中)
	unsigned int InBuFFLength,                  // 輸入,InBuFF的長度
	unsigned int keyt,                          // 輸入,編碼時的密鑰,密鑰是通過加權概率模型權係數,編碼到了每一個比特上,keyt = 0時無密鑰
	unsigned char *OutBuFF,                     // 輸入,本次編碼後將ByteLength個字節存入到OutBuFF中
	unsigned int ByteLength                     // 輸入,用戶自定義輸出結果的字節長度,本函數做了限制,最大不小於128位(16個字節),理論上不封頂。
	)
{
	int i = 0, j = 0;
	// 初始化編碼器值
	unsigned int EFLow = 2147483648;
	unsigned int EFRange = 2147483648;
	unsigned int EFDigits = 0;
	unsigned int EFFollow = 0;
	unsigned int EFTotal = 0;
	unsigned int EOut_buff_loop = 0;
	double p0 = 0.0, p1 = 0.0, JIELINCOE = 0.0;
	// 小於等於1個字節的不進行處理
	if(InBuFFLength <= 1){
		return 0;
	}else{
		// 計算當前InBuFF中符號0和符號1的概率
		JIELINCOE = GetJieLinCoeV(InBuFF, &p0, &p1, InBuFFLength, ByteLength);
		// 設定了密鑰
		if(keyt > 0){
			JIELINCOE = ChangeKeyt(JIELINCOE, keyt);
		}
		// 直接進行編碼
		for(i = 0; i < InBuFFLength ; ++ i){
			// 每個字節有8比特
			for(j = 0; j < 8; ++ j){
				// 對當前的symbol進行編碼
				WEncode(bitOfByteTable[InBuFF[i]][j], p0,  p1, JIELINCOE, &EFLow, &EFRange, &EFDigits, &EFFollow, OutBuFF,&EOut_buff_loop);
			}
		}
		// 結束編碼
		WFinishEncode(&EFLow, &EFRange, &JIELINCOE, &EFDigits, &EFFollow, OutBuFF, &EOut_buff_loop);
		// 不足自定義輸出長度ByteLength的補充符號0
		if(EOut_buff_loop < ByteLength){
			for(i = EOut_buff_loop; i < ByteLength; ++i){
				WEOutPutEncode(OutBuFF, &EOut_buff_loop, 0);
			}
		}
	}
	return OutBuFF;
}

測試main.c源碼:

#include "WJLHA.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#ifdef WIN32
#define  inline __inline
#endif // WIN32

int main(){
	long t1,t2;
	int i,j,tj;
	unsigned char *In_BUFF;
	unsigned char *Out_BUFF;
	int In_BUFF_Len = 2000;
	int ByteLength = 32;
	unsigned int keyt = 0;
	In_BUFF = (unsigned char *)malloc(sizeof(unsigned char) * In_BUFF_Len);
	Out_BUFF = (unsigned char *)malloc(sizeof(unsigned char) * ByteLength);
	// 產生隨機數
	srand(time(0));
	// 產生一組隨機數
	for(i = 0; i < In_BUFF_Len; ++i){
		In_BUFF[i] = rand() % 256;
	}
	
	// 調用WJLHA算法
	WJLHA(In_BUFF, In_BUFF_Len, keyt, Out_BUFF, ByteLength);

	printf("WJLHA值:\n");
	// 輸出Out_BUFF
	for(i = 0; i < ByteLength; ++i){
		printf("%d ", Out_BUFF[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章