2020年4月16日,由王杰林先生发明的单向散列算法1.0.0版本源代码正式在ImapBox博客发布。 而我所发明的WJLHA-1(Wang JieLin Hash Algorithm V1)算法,具有自定义位长,算法应用灵活,且更安全可靠,并且支持密钥、自迭代编码。曾经SHA算法美国号称十年不可破解,现在发布我的第一代WJLHA-1算法源代码,在公布理论和源代码的情形下,欢迎全球专业人士来破解。该算法我已申请发明专利,任何想学习交流的专家学者、专业人士等均可通过邮件254908447@qq.com联系我。郑重提醒:未经授权,严禁商用 (二)WJLHA-1算法的C源码: 头文件:WJLHA.h C源:WJLHA.c 测试main.c源码:
该算法是我国自主创新的散列算法。该算法理论来源于《杰林码-加权概率模型单向散列函数》,该算法是在杰林码基础算法理论《概率加权模型(The Weighted Probability Model)》衍生出来。
(一)国际上现有算法:
(1) MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值。
(2) SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法。
源代码包括了WJLHA.h、WJLHA.c、main.c,欢迎测试。#pragma once /****************************************************************************** 杰林码-散列算法 理论来源《杰林码-加权概率模型单向散列函数》 代码实现:王杰林 时间:2020.04.15 版本号:WJLHA-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
#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 Count0 = 0, CountAll = 0, H; // 首先是判断InBuFFLength 是不是大于等于 3 * ByteLength CountAll = (double)InBuFFLength * 8; // 统计符号0的个数 for(i = 0; i < InBuFFLength; ++i){ Count0 += (double)CntOfOneSymbol[InBuFF[i]]; } // 求出符号0的概率p0和符号1的概率p1 *p0 = Count0 / CountAll; *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; // 计算当前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); return OutBuFF; }
#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 = 10000; 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;//rand() //printf("%d ", In_BUFF[i]); } //printf("n"); // 调用WJLHA-1算法 WJLHA(In_BUFF, In_BUFF_Len, keyt, Out_BUFF, ByteLength); printf("WJLHA-1编码后的值:n"); // 输出Out_BUFF for(i = 0; i < ByteLength; ++i){ printf("%d ", Out_BUFF[i]); } printf("n"); system("pause"); return 0; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算