Files
LayaNative2.0/Conch/source/common/util/JCCrypto.h
T
2020-11-11 16:17:13 +08:00

116 lines
2.8 KiB
C++

/**
@file JCCrypto.h
@brief
@author hugao
@version 1.0
@date 2016_5_12
*/
#ifndef __JCCrypto_H__
#define __JCCrypto_H__
#pragma warning(disable:4786)
#define NORMAL_SIZE BUFSIZ
#include <string>
using namespace std;
namespace laya
{
char *base64_decode(const unsigned char *str, int length, int *ret_length);
char* base64_encode(const unsigned char *str, int length, int *ret_length);
unsigned int base64Decode(char *pDest, const char *pSrc, unsigned int srclen);
unsigned int base64Encode(char *pDest, const char *pSrc, unsigned int srclen);
class JCBKDRHash {
public:
static unsigned int hashStr(const unsigned char* str);
static unsigned int hashMem(const unsigned char* mem, int len);
};
#ifndef WEBASM
struct MD5_DATA
{
unsigned long data[4];
bool operator < (const MD5_DATA& p) const
{
return memcmp(data, p.data, 4 * sizeof(long))>0;
}
};
class JCMD5
{
private:
struct md5_context
{
unsigned int total[2];
unsigned int state[4];
unsigned char buffer[64];
};
void md5_starts(struct md5_context *ctx);
void md5_process(struct md5_context *ctx, unsigned char data[64]);
void md5_update(struct md5_context *ctx, unsigned char *input, size_t length);
void md5_finish(struct md5_context *ctx, unsigned char digest[16]);
public:
//! construct a CMD5 from any buffer
void GenerateMD5(unsigned char* buffer, size_t bufferlen);
//! construct a CMD5
JCMD5();
//! construct a md5src from char *
JCMD5(const char * md5src);
//! construct a CMD5 from a 16 bytes md5
JCMD5(unsigned long* md5src);
//! add a other md5
JCMD5 operator +(JCMD5 adder);
//! just if equal
bool operator ==(JCMD5 cmper);
//! give the value from equer
// void operator =(CMD5 equer);
//! to a string
string ToString();
unsigned long m_data[4];
};
#ifndef THIN_COMMON_WITHOUT_DOWNLOAD
class JCEncrypt
{
public:
/** @brief构造函数
*/
JCEncrypt();
/** @brief析构函数
*/
~JCEncrypt();
static bool decrypt(char *buf, int len);
static std::string getpassCode(std::string url);
private:
static std::string s_sPassCode;//生成秘钥的辅助字符串
static std::string s_sPreCode; //加密文件的前面的标志
static std::string s_sPassMd5; //秘钥
public:
static int s_nPreLen; //加密前缀的字数
};
#endif
uint32_t crc32(const unsigned char *buf, uint32_t size);
#endif
}
//------------------------------------------------------------------------------
#endif //__JCCrypto_H__
//-----------------------------END FILE--------------------------------