nginx-MD5算法实现

💖 简介

MD5加密算法,也叫信息摘要算法,在项目中经常用到,一直对其原理比较好奇,在学习nginx源码的过程中,发现有其实现,就单独拿出来,进行调试学习,对于理解其原理非常有帮助。

💖 算法代码

md5.h文件


/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


#ifndef _NGX_MD5_H_INCLUDED_
#define _NGX_MD5_H_INCLUDED_


#include <iostream>
#include <windows.h>


typedef struct {
   
	uint64_t  bytes;
	uint32_t  a, b, c, d;
	u_char    buffer[64];
} ngx_md5_t;


void ngx_md5_init(ngx_md5_t *ctx);
void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size);
void ngx_md5_final(u_char result[16], ngx_md5_t *ctx);


#endif /* _NGX_MD5_H_INCLUDED_ */

md5.cpp

#include "md5.h"
#define ngx_memcpy(dst, src, n)   (void) memcpy(dst, src, n)
#define ngx_memzero(buf, n)       (void) memset(buf, 0, n)
#define ngx_memset(buf, c, n)     (void) memset(buf, c, n)

static const u_char *ngx_md5_body(ngx_md5_t *ctx, const u_char *data,size_t size);

/*
md5初始化
*/
void
ngx_md5_init(ngx_md5_t *ctx)
{
   
	ctx->a = 0x67452301;
	ctx->b = 0xefcdab89;
	ctx->c = 0x98badcfe;
	ctx->d = 0x10325476;

	ctx->bytes = 0;
}


void
ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size)
{
   
	size_t  used, free;

	used = (size_t)(ctx->bytes & 0x3f);
	ctx->bytes += size;

	if (used) {
   
		free = 64 - used;

		if (size < free) {
   
			ngx_memcpy(&ctx->buffer[used], data, size);
			return;
		}

		ngx_memcpy(&ctx->buffer[used], data, free);
		data = (u_char *)data + free;
		size -= free;
		(void)ngx_md5_body(ctx, ctx->buffer, 64);
	}

	if (size >= 64) {
   
		data = ngx_md5_body(ctx, reinterpret_cast<const u_char*>(data), size & ~(size_t)0x3f);
		size &= 0x3f;
	}

	memcpy(ctx->buffer, data, size);
}


void
ngx_md5_final(u_char result[16], ngx_md5_t *ctx)
{
   
	size_t  used, free;

	used = (size_t)(ctx->bytes & 0x3f);

	ctx->buffer[used++] = 0x80;

	free = 64 - used;

	if (free < 8) {
   
		ngx_memzero(&ctx->buffer[used], free);
		(void)ngx_md5_body(ctx, ctx->buffer, 64);
		used = 0;
		free = 64;
	}

	ngx_memzero(&ctx->buffer[used], free - 8);

	ctx->bytes <<= 3;
	ctx->buffer[56] = (u_char)ctx->bytes;
	ctx->buffer[57] = (u_char)(ctx->bytes >> 8);
	ctx->buffer[58] = (u_char)(ctx->bytes >> 16);
	ctx->buffer[59] = (u_char)(ctx->bytes >> 24);
	ctx->buffer[60] = (u_char)(ctx->bytes >> 32);
	ctx->buffer[61] = (u_char)(ctx->bytes >> 40);
	ctx->buffer[62] = (u_char)(ctx->bytes >> 48
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议 视频教程+笔记+课件+资料 虽然在课程中还讲解了部分HTTP协议的技术,但是课程的重点还是NGINX、JVM、Tomcat三相运维与配置技术。课程内容包括了Nginx进阶基础,Nginx配置提升,JVM虚拟机尝试,JVM运维实用排障工具,JVM监控工具,Tomcat配置,Tomcat运维与部署等Web服务器的必备运维部署技术。 ===============课程目录=============== (1)\笔记+课件+资料;目录中文件数:0个 (2)\视频教程;目录中文件数:49个 ├─1.01 HTTP协议-工作原理及消息结构.mp4 ├─1.02 HTTP协议-客户端请求信息及服务端响应信息.mp4 ├─1.03 HTTP协议-请求方法及响应头信息.mp4 ├─1.04 HTTP协议-状态码.mp4 ├─1.05 Nginx进阶基础-Nginx介绍及为什么选择Nginx.mp4 ├─1.06 Nginx进阶基础-IO多路复用及内部技术架构.mp4 ├─1.07 Nginx进阶基础-虚拟主机.mp4 ├─1.08 Nginx进阶基础-虚拟主机.mp4 ├─2.01 Nginx进阶常见配置-虚拟主机+PHP-FPM.mp4 ├─2.02 Nginx进阶-常见配置-反向代理.mp4 ├─2.03 Nginx进阶基础-常见配置-反向代理.mp4 ├─2.04 Nginx进阶基础-upstream.mp4 ├─2.05 Nginx进阶基础-常用配置-会话保持.mp4 ├─2.06 Nginx进阶基础常见配置-动静分离.mp4 ├─2.07 Nginx进阶常见配置-rewrite-概念介绍.mp4 ├─2.08 Nginx进阶常见配置-rewrite实例.mp4 ├─2.09 Nginx进阶常见配置-rewrite实例.mp4 ├─2.10 Nginx进阶常见配置-if指令.mp4 ├─2.11 Nginx进阶常见配置-set及return指令.mp4 ├─2.12 Nginx进阶基础-常见配置-return及break指令.mp4 ├─2.13 Nginx进阶基础-常见配置-location.mp4 ├─3.01 Nginx进阶配置提升-预定义变量及日志详解.mp4 ├─3.02 Nginx进阶配置提升-日志切割及升级.mp4 ├─3.03 Nginx进阶-配置提升-Nginx错误页面.mp4 ├─3.04 Nginx进阶-配置提升-访问控制.mp4 ├─3.05 Nginx进阶-配置提升-流量控制.mp4 ├─3.06 Nginx进阶-提升配置-流量控制.mp4 ├─3.07 Nginx进阶-配置提升-Nginx监控.mp4 ├─3.08 Nginx进阶-配置提升-NginxAlias虚拟目录.mp4 ├─4.01 jvm虚拟机常识-什么是java虚拟机-java如何做到跨平台.mp4 ├─4.02 jvm虚拟机常识-虚拟机结构.mp4 ├─4.03 jvm虚拟机常识-虚拟机堆内存结构.mp4 ├─4.04 jvm虚拟机常识-jvm虚拟机参数类型-常用的jvm参数.mp4 ├─4.05 java细腻及讲解-jvm虚拟机常识-常用垃圾回收算法.mp4 ├─4.06 jvm运维实用排障工具.mp4 ├─4.07 jvm运维实用排障工具-jps-jstack.mp4 ├─4.08 jvm运维实用排障工具-jinfo-jstat.mp4 ├─4.09 jvm运维实用监控工具-virtualvm安装-安装插件.mp4 ├─4.10 jvm运维实用监控工具-如何监控jvm.mp4 ├─5.01 tomcat简介与tomcat基础JDk.mp4 ├─5.02 tomcat&jdk安装.mp4 ├─5.03 tomcat目录介绍-tomcat运维-启动与关闭.mp4 ├─5.04 tomcat运维-tomcat日志说明-tomcat管理功能.mp4 ├─5.05 tomcat运维-server.xml配置文件注释.mp4 ├─5.06 tomcat运维-web站点部署.mp4 ├─5.07 tomcat运维-部署开源站点.mp4 ├─5.08 tomcat运维-tomcat优化.mp4 ├─5.09 tomcat运维-tomcat性能优化.mp4 ├─5.10 tomcat部署war包实战.mp4 (3)\笔记+课件+资料\第1天;目录中文件数:4个 ├─01-第1天-HTTP协议.pdf ├─02-第1天-Nginx进阶基础.pdf ├─第1天-HTTP协议.md ├─第1天-Nginx进阶基础.md (4)\笔记+课件+资料\第2天;目录中文件数:1个
基于SpringCloud+ElasticSearch+Vue分布式微服务全品类购物商城设计 开发工具: Idea + WebStorm + Mysql5.6 + Redis + RabbitMQ + ElasticSearch + Nginx反向代理服务器 这是一个基于SpringCloud分布式微服务框架开发的一个购物商城网站,前端开发技术vue实现ui。项目工程量很大,涉及的技术点很多,所以这里我们这个项目实现了最核心的功能,包括管理员再后台进行商品的添加维护操作,商品信息包括了Spu信息和Sku信息,不了解这个概念的可以百度下,用户在前台可以注册登录,注册的时候需要用户手机验证码,这个可以对接短信中心,用户登录认证采用的是JWT访问令牌,令牌的加密验证采用的非对称RSA加密算法,整个项目采用顶级域名和二级域名访问,统一到nginx服务器进行处理,一级域名直接访问静态网站前端,api打头二级域名数据包统一分配到网关进行访问,网关会根据请求路径分发路由到每个微服务实现对应的业务,二级manage域名给管理员用的。用户登录后可以根据关键词搜索对应的商品信息,这里的搜索对接了全文搜索引擎ElasticSearch,它的核心原理在于倒排索引和分词技术,其中商品页面访问量大,咱们的项目实现了商品页面的静态化,当管理员添加和修改商品的时候都会给RabbitMQ消息中间件发送一个消息,商品页面静态化服务监听了这个消息会实时进行页面的静态化写入文件操作,用户提交订单后对接了微信支付,这里实现的是微信二维码的在线支付技术。 -------- <项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值