WJLHA算法1.0.1版本

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;
}
原创文章 31 获赞 50 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wjlxueshu/article/details/105754686