帮网站网站做推广被抓会判刑吗,广西做网站建设的公司,网站开发指什么软件,asp网站伪静态教程MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 #xff08;基于qt5.14.2#xff09;测试记录 MD5介绍 1。 一种单向加密算法#xff0c;即对明文加密#xff0c;而不能通过密文得到明文。对原数据的任何改动#xff0c;哪怕是1字节#xff0c;得到的MD5值都有很大的区…MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 基于qt5.14.2测试记录 MD5介绍 1。 一种单向加密算法即对明文加密而不能通过密文得到明文。对原数据的任何改动哪怕是1字节得到的MD5值都有很大的区别。可以用公式表示密文Md5_calc(原文数据)应用场景
1.密码认证
2.数据校验代码分析 基于qt5.14.2
md5.c
#include string.h
#include md5.h#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 ac; \a ROTATE_LEFT(a,s); \a b; \}
#define GG(a,b,c,d,x,s,ac) \{ \a G(b,c,d) x ac; \a ROTATE_LEFT(a,s); \a b; \}
#define HH(a,b,c,d,x,s,ac) \{ \a H(b,c,d) x ac; \a ROTATE_LEFT(a,s); \a b; \}
#define II(a,b,c,d,x,s,ac) \{ \a I(b,c,d) x ac; \a ROTATE_LEFT(a,s); \a b; \}void MD5Transform(unsigned int state[4],unsigned char block[64]);
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len);unsigned char PADDING[] {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
};void MD5Init(MD5_CTX *context) {context-count[0] 0;context-count[1] 0;context-state[0] 0x67452301;context-state[1] 0xEFCDAB89;context-state[2] 0x98BADCFE;context-state[3] 0x10325476;
}
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen)
{unsigned int i 0,index 0,partlen 0;index (context-count[0] 3) 0x3F;partlen 64 - index;context-count[0] inputlen 3;if(context-count[0] (inputlen 3)) {context-count[1];}context-count[1] inputlen 29;if(inputlen partlen) {memcpy(context-buffer[index],input,partlen);MD5Transform(context-state,context-buffer);for(i partlen;i64 inputlen;i64) {MD5Transform(context-state,input[i]);}index 0;} else {i 0;}memcpy(context-buffer[index],input[i],inputlen-i);
}void MD5Final(MD5_CTX *context,unsigned char digest[16]) {unsigned int index 0,padlen 0;unsigned char bits[8];index (context-count[0] 3) 0x3F;padlen (index 56)?(56-index):(120-index);MD5Encode(bits,context-count,8);MD5Update(context,PADDING,padlen);MD5Update(context,bits,8);MD5Encode(digest,context-state,16);
}
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len) {unsigned int i 0,j 0;while(j len) {output[j] input[i] 0xFF;output[j1] (input[i] 8) 0xFF;output[j2] (input[i] 16) 0xFF;output[j3] (input[i] 24) 0xFF;i;j4;}
}
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len) {unsigned int i 0,j 0;while(j len) {output[i] (input[j]) | (input[j1] 8) | (input[j2] 16) | (input[j3] 24);i;j4;}
}
void MD5Transform(unsigned int state[4],unsigned char block[64]) {unsigned int a state[0];unsigned int b state[1];unsigned int c state[2];unsigned int d state[3];unsigned int x[64];MD5Decode(x,block,64);FF(a, b, c, d, x[ 0], 7, 0xd76aa478);FF(d, a, b, c, x[ 1], 12, 0xe8c7b756);FF(c, d, a, b, x[ 2], 17, 0x242070db);FF(b, c, d, a, x[ 3], 22, 0xc1bdceee);FF(a, b, c, d, x[ 4], 7, 0xf57c0faf);FF(d, a, b, c, x[ 5], 12, 0x4787c62a);FF(c, d, a, b, x[ 6], 17, 0xa8304613);FF(b, c, d, a, x[ 7], 22, 0xfd469501);FF(a, b, c, d, x[ 8], 7, 0x698098d8);FF(d, a, b, c, x[ 9], 12, 0x8b44f7af);FF(c, d, a, b, x[10], 17, 0xffff5bb1);FF(b, c, d, a, x[11], 22, 0x895cd7be);FF(a, b, c, d, x[12], 7, 0x6b901122);FF(d, a, b, c, x[13], 12, 0xfd987193);FF(c, d, a, b, x[14], 17, 0xa679438e);FF(b, c, d, a, x[15], 22, 0x49b40821);GG(a, b, c, d, x[ 1], 5, 0xf61e2562);GG(d, a, b, c, x[ 6], 9, 0xc040b340);GG(c, d, a, b, x[11], 14, 0x265e5a51);GG(b, c, d, a, x[ 0], 20, 0xe9b6c7aa);GG(a, b, c, d, x[ 5], 5, 0xd62f105d);GG(d, a, b, c, x[10], 9, 0x2441453);GG(c, d, a, b, x[15], 14, 0xd8a1e681);GG(b, c, d, a, x[ 4], 20, 0xe7d3fbc8);GG(a, b, c, d, x[ 9], 5, 0x21e1cde6);GG(d, a, b, c, x[14], 9, 0xc33707d6);GG(c, d, a, b, x[ 3], 14, 0xf4d50d87);GG(b, c, d, a, x[ 8], 20, 0x455a14ed);GG(a, b, c, d, x[13], 5, 0xa9e3e905);GG(d, a, b, c, x[ 2], 9, 0xfcefa3f8);GG(c, d, a, b, x[ 7], 14, 0x676f02d9);GG(b, c, d, a, x[12], 20, 0x8d2a4c8a);HH(a, b, c, d, x[ 5], 4, 0xfffa3942);HH(d, a, b, c, x[ 8], 11, 0x8771f681);HH(c, d, a, b, x[11], 16, 0x6d9d6122);HH(b, c, d, a, x[14], 23, 0xfde5380c);HH(a, b, c, d, x[ 1], 4, 0xa4beea44);HH(d, a, b, c, x[ 4], 11, 0x4bdecfa9);HH(c, d, a, b, x[ 7], 16, 0xf6bb4b60);HH(b, c, d, a, x[10], 23, 0xbebfbc70);HH(a, b, c, d, x[13], 4, 0x289b7ec6);HH(d, a, b, c, x[ 0], 11, 0xeaa127fa);HH(c, d, a, b, x[ 3], 16, 0xd4ef3085);HH(b, c, d, a, x[ 6], 23, 0x4881d05);HH(a, b, c, d, x[ 9], 4, 0xd9d4d039);HH(d, a, b, c, x[12], 11, 0xe6db99e5);HH(c, d, a, b, x[15], 16, 0x1fa27cf8);HH(b, c, d, a, x[ 2], 23, 0xc4ac5665);II(a, b, c, d, x[ 0], 6, 0xf4292244);II(d, a, b, c, x[ 7], 10, 0x432aff97);II(c, d, a, b, x[14], 15, 0xab9423a7);II(b, c, d, a, x[ 5], 21, 0xfc93a039);II(a, b, c, d, x[12], 6, 0x655b59c3);II(d, a, b, c, x[ 3], 10, 0x8f0ccc92);II(c, d, a, b, x[10], 15, 0xffeff47d);II(b, c, d, a, x[ 1], 21, 0x85845dd1);II(a, b, c, d, x[ 8], 6, 0x6fa87e4f);II(d, a, b, c, x[15], 10, 0xfe2ce6e0);II(c, d, a, b, x[ 6], 15, 0xa3014314);II(b, c, d, a, x[13], 21, 0x4e0811a1);II(a, b, c, d, x[ 4], 6, 0xf7537e82);II(d, a, b, c, x[11], 10, 0xbd3af235);II(c, d, a, b, x[ 2], 15, 0x2ad7d2bb);II(b, c, d, a, x[ 9], 21, 0xeb86d391);state[0] a;state[1] b;state[2] c;state[3] d;
}
md5.h
#ifndef MD5_H
#define MD5_Htypedef struct
{unsigned int count[2];unsigned int state[4];unsigned char buffer[64];
}MD5_CTX;void MD5Init(MD5_CTX *context);
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);
void MD5Final(MD5_CTX *context,unsigned char digest[16]);#endif
main.c
#include QCoreApplicationextern C{ //添加头文件#include md5.h
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int i, n;bool isfile false;unsigned char decrypt[16];MD5_CTX md5;if(argc 1 strlen(argv[1]) 2 !memcmp(argv[1], -f, 2)) {isfile true;}if(argc 1 || (argc 2 isfile)) {fprintf(stderr, usage:\n %s -f file ...\n %s string ...\n, argv[0], argv[0]);return 1;}if(isfile) {FILE *fp;for(n2; nargc; n) {fp fopen(argv[n], rb);if(fp NULL) {fprintf(stderr, File %s not exists, errno %d, error %s\n, argv[n], errno, strerror(errno));continue;}MD5Init(md5);do {unsigned char encrypt[1024];while(!feof(fp)) {MD5Update(md5, encrypt, fread(encrypt, 1, sizeof(encrypt), fp));}fclose(fp);} while(0);MD5Final(md5, decrypt);for(i0; i16; i) {printf(%02x, decrypt[i]); //02x前需要加上 %}printf( %s\n, argv[n]);}} else {for(n1; nargc; n) {MD5Init(md5);MD5Update(md5,(unsigned char*) argv[n], strlen(argv[n]));MD5Final(md5, decrypt);for(i0; i16; i) {printf(%02x, decrypt[i]); //02x前需要加上 %}printf( %s\n, argv[n]);}}return a.exec();
}测试记录
源码打包windeployqt.exe工具得到MD5.exe 运行测试创建一个test.txt文件打开文件写入123保存关闭运行如下测试命令MD5.exe -f test.txt 得到密文202cb962ac59075b964b07152d234b70 测试准确性利用在线工具输入123得到相同的密文验证成功。