當前位置:編程學習大全網 - 源碼下載 - 如何對字符串進行MD5加密,用C語言實現,給出源代碼和加密函數

如何對字符串進行MD5加密,用C語言實現,給出源代碼和加密函數

#include <stdio.h>

#define S11 7

#define S12 12

#define S13 17

#define S14 22

#define S21 5

#define S22 9

#define S23 14

#define S24 20

#define S31 4

#define S32 11

#define S33 16

#define S34 23

#define S41 6

#define S42 10

#define S43 15

#define S44 21

#define R_memset(x, y, z) memset(x, y, z)

#define R_memcpy(x, y, z) memcpy(x, y, z)

#define R_memcmp(x, y, z) memcmp(x, y, z)

typedef unsigned long UINT4;

typedef unsigned char *POINTER;

typedef struct {

/*四個32bits數,用於存放最終計算得到的消息摘要.當消息長度>512bits時,也用於存放每個512bits的中間結果*/

UINT4 state[4];

/*存儲原始信息的bits數長度,不包括填充的bits,最長為2^64 bits*/

UINT4 count[2];

/*存放輸入的信息的緩沖區,512bits*/

unsigned char buffer[64];

} MD5_CTX;

static void MD5Transform(UINT4[4], unsigned char[64]);

static void Encode(unsigned char *, UINT4 *, unsigned int);

static void Decode(UINT4 *, unsigned char *, unsigned int);

/*

用於bits填充的緩沖區,當欲加密的信息的bits數被512除其余數為448時,需要填充的bits的最大值為512=64*8*/

static unsigned char PADDING[64] = {

0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

};

/*接下來的這幾個宏定義是md5算法規定的,就是對信息進行md5加密都要做的運算*/

#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))

#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))

#define H(x, y, z) ((x) ^ (y) ^ (z))

#define I(x, y, z) ((y) ^ ((x) | (~z)))

#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

#define FF(a, b, c, d, x, s, ac) {\

(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac);\

(a) = ROTATE_LEFT ((a), (s));\

(a) += (b);\

}

#define GG(a, b, c, d, x, s, ac) {\

(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac);\

(a) = ROTATE_LEFT ((a), (s));\

(a) += (b);\

}

#define HH(a, b, c, d, x, s, ac) {\

(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac);\

(a) = ROTATE_LEFT ((a), (s));\

(a) += (b);\

}

#define II(a, b, c, d, x, s, ac) {\

(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac);\

(a) = ROTATE_LEFT ((a), (s));\

(a) += (b);\

}

  • 上一篇:惠普源代碼無數據庫筆記本
  • 下一篇:源代碼管理服務
  • copyright 2024編程學習大全網