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