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;
}