mirror of
https://github.com/Relintai/rcpp_fw_static.git
synced 2025-04-20 17:21:17 +02:00
82 lines
2.2 KiB
C++
82 lines
2.2 KiB
C++
/*
|
|
*******************************************************
|
|
* brief: md5 encryption
|
|
* author: Monkey.Knight
|
|
*******************************************************
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* Md5.h
|
|
* An Tao
|
|
*
|
|
* Copyright 2018, An Tao. All rights reserved.
|
|
* https://github.com/an-tao/drogon
|
|
* Use of this source code is governed by a MIT license
|
|
* that can be found in the License file.
|
|
*
|
|
* Drogon
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <cstdint>
|
|
|
|
#define BIT_OF_BYTE 8
|
|
#define BIT_OF_GROUP 512
|
|
#define SRC_DATA_LEN 64
|
|
|
|
#define DEF_F(X, Y, Z) ((((X) & (Y)) | ((~X) & (Z))))
|
|
#define DEF_G(X, Y, Z) (((X) & (Z)) | ((Y) & (~Z)))
|
|
#define DEF_H(X, Y, Z) ((X) ^ (Y) ^ (Z))
|
|
#define DEF_I(X, Y, Z) ((Y) ^ ((X) | (~Z)))
|
|
|
|
#define FF(a, b, c, d, Mj, s, ti) \
|
|
(a = b + cycleMoveLeft((a + DEF_F(b, c, d) + Mj + ti), s));
|
|
#define GG(a, b, c, d, Mj, s, ti) \
|
|
(a = b + cycleMoveLeft((a + DEF_G(b, c, d) + Mj + ti), s));
|
|
#define HH(a, b, c, d, Mj, s, ti) \
|
|
(a = b + cycleMoveLeft((a + DEF_H(b, c, d) + Mj + ti), s));
|
|
#define II(a, b, c, d, Mj, s, ti) \
|
|
(a = b + cycleMoveLeft((a + DEF_I(b, c, d) + Mj + ti), s));
|
|
|
|
class Md5Encode
|
|
{
|
|
public:
|
|
struct ParamDynamic
|
|
{
|
|
uint32_t ua_;
|
|
uint32_t ub_;
|
|
uint32_t uc_;
|
|
uint32_t ud_;
|
|
uint32_t va_last_;
|
|
uint32_t vb_last_;
|
|
uint32_t vc_last_;
|
|
uint32_t vd_last_;
|
|
};
|
|
|
|
public:
|
|
static std::string encode(const char *data, const size_t dataLen);
|
|
|
|
protected:
|
|
static uint32_t cycleMoveLeft(uint32_t srcNum, int bitNumToMove);
|
|
static void roundF(char *data512Ptr, ParamDynamic ¶m);
|
|
static void roundG(char *data512Ptr, ParamDynamic ¶m);
|
|
static void roundH(char *data512Ptr, ParamDynamic ¶m);
|
|
static void roundI(char *data512Ptr, ParamDynamic ¶m);
|
|
static void rotationCalculate(char *data512Ptr, ParamDynamic ¶m);
|
|
static std::string getHexStr(uint32_t numStr);
|
|
static uint32_t fillData(const char *inDataPtr,
|
|
int dataByteLen,
|
|
char **outDataPtr);
|
|
|
|
private:
|
|
static const uint32_t kA;
|
|
static const uint32_t kB;
|
|
static const uint32_t kC;
|
|
static const uint32_t kD;
|
|
static const uint64_t tiNumInteger;
|
|
};
|