MD5摘要算法源码



public class MD5 {
private static final byte[] PADDING = {
-128, 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
};
private static final int S11 = 7;
private static final int S12 = 12;
private static final int S13 = 17;
private static final int S14 = 22;
private static final int S21 = 5;
private static final int S22 = 9;
private static final int S23 = 14;
private static final int S24 = 20;
private static final int S31 = 4;
private static final int S32 = 11;
private static final int S33 = 16;
private static final int S34 = 23;
private static final int S41 = 6;
private static final int S42 = 10;
private static final int S43 = 15;
private static final int S44 = 21;
private long[] state = new long[4]; // state(ABCD)
private long[] count = new long[2]; // number of bits, modulo 2^64
private byte[] buffer = new byte[64]; // input buffer
private String digestHexStr;
private byte[] digest = new byte[16];

public MD5() {
md5Init();

return;
}

public String getMD5ofString(byte[] inbuf, int buflen) {
getMD5ofByte(inbuf, buflen);
digestHexStr = "";

for (int i = 0; i < 16; i++) {
digestHexStr += byteHEX(digest[i]);
}

return digestHexStr;
}

public byte[] getMD5ofByte(byte[] inbuf, int buflen) {
md5Init();
md5Update(inbuf, buflen);
md5Final();

return digest;
}

private void md5Init() {
count[0] = 0L;
count[1] = 0L;
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;

return;
}

private long F(long x, long y, long z) {
return (x & y) | ((~x) & z);
}

private long G(long x, long y, long z) {
return (x & z) | (y & (~z));
}

private long H(long x, long y, long z) {
return x ^ y ^ z;
}

private long I(long x, long y, long z) {
return y ^ (x | (~z));
}

private long FF(long a, long b, long c, long d, long x, long s, long ac) {
a += (F(b, c, d) + x + ac);
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;

return a;
}

private long GG(long a, long b, long c, long d, long x, long s, long ac) {
a += (G(b, c, d) + x + ac);
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;

return a;
}

private long HH(long a, long b, long c, long d, long x, long s, long ac) {
a += (H(b, c, d) + x + ac);
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;

return a;
}

private long II(long a, long b, long c, long d, long x, long s, long ac) {
a += (I(b, c, d) + x + ac);
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;

return a;
}

private void md5Update(byte[] inbuf, int inputLen) {
int i;
int index;
int partLen;
byte[] block = new byte[64];
index = (int) (count[0] >>> 3) & 0x3F;

// Update number of bits
if ((count[0] += (inputLen << 3)) < (inputLen << 3)) {
count[1]++;
}

count[1] += (inputLen >>> 29);
partLen = 64 - index;

// Transform as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);

for (i = partLen; (i + 63) < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
}

index = 0;
} else {
i = 0;
}

// Buffer remaining input
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}

private void md5Final() {
byte[] bits = new byte[8];


MD5算法 C语言 (从OpenSSL库中分离算法:一) 从OpenSSL库中分离算法-MD5算法 OpenSSL简介: OpenSSL 是用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的一个强大、商业级和功能齐全的工具包,它也是一个通用的密码学库。包含有RSA、SM4、DES、AES等诸多加密算法。 OpenSSL GitHub地址如下: GitHub - openssl/openssl: TLS/SSL and crypto library 在日常的开发工作中,有时只想用OpenSSL库中的一种算法,此时调用整个OpenSSL库,往往是没必要的 阅读详情

相关推荐

【安全算法之MD5】MD5摘要运算的C语言源码实现

大家都知道,MD5是一种摘要运算算法,关于更多的摘要算法,可以参考我之前的一篇文章:摘要算法汇总 今天要给大家带来的是MD5摘要运算的源码实现,废话不多说,直接上源码: 先看头文件,什么了一些结构体定义和操作宏定义,以及导出的3个API接口: #ifndef __MD5_H__ #define __MD5_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include <stdint.h> typedef

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 7041

MD5源码(C语言描述)

MD5源码(C语言描述)

propor的专栏 2025

md5数据加密的MATLAB仿真

MD5算法是Message-Digest Algorithm version.5的缩写,译为,消息摘要算法。是一种基于“消息摘要”的算法。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1162

MD5信息摘要算法详解

MD5信息摘要算法详解 文章目录MD5信息摘要算法详解01 MD5概要02 MD5特性03 MD5应用04 MD5实现算法05 MD5在线网站 01 MD5概要 MD5信息摘要算法,一种被广泛使用的密码散列函数,提供消息完整性,MD5的长度为128位(按照16进制编码,16字节,得到32个字符)是一个散列值(hash value)。 MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。

weixin_43211186的博客 5191

MD5加密算法的源码实现与应用

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转换成固定长度(128位,即32个字符)的哈希值,常用于确保信息传输完整一致。MD5由Ron Rivest在1991年设计,最初用于加强密码存储的安全性,后来成为了广泛的应用标准之一。MD5的算法原理基于一种称为“消息摘要”的技术。它通过一系列的逻辑运算,将输入数据进行非线性函数变换,最终生成一个唯一的哈希值。

weixin_42608318的博客 1161

LayaBox CommandBuffer描边使用详细

项目需要使用LayaBox做一个给3D物体动态描边的一个功能,前前后后踩了一些坑算是把这个东西给做出来了把我改好的代码贴上,分享给大家。 (1)想要使用描边你的引擎版本必须 >=2.9.0 (2)你必须下载 Laya官方的BlurShader库才能使用这个功能,下载地址:https://github.com/layabox/layaair-demo/tree/master/h5/3d/ts/LayaAir3D_PostProcess/BlurShader 下载完之后把BlurShader放到自己项目的

小智队长 1735

各种加密算法简介(如MD5、SHA-256源码实现)

讲解各种加密算法,如MD5、SHA-256,还附上源码实现

bigger_belief的博客 5168

从理论到波形:NE555多谐振荡器设计与示波器实战验证

本文详细介绍了NE555多谐振荡器的设计原理与实战验证方法。从基础理论到电路参数计算,再到面包板搭建与示波器测量,全面解析如何利用NE555芯片实现稳定的方波输出。通过实际案例演示了频率调整、占空比优化等技巧,并提供了常见问题排查指南,帮助电子爱好者快速掌握这一经典电路设计。

weixin_29159613的博客 281

MD5算法及源代码

//获得MD5的二个数组和一个buffer并初始化MD5 *GetMD5();//初始化MD5的二个数据和一个buffer void MD5Init (MD5 *context);//用于计算MD5值的函数 void MD5Update (MD5 *context, unsigned char *input, unsigned int inputLen);//输出结果 void M

幽灵剑客的专栏 1719

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

泛微ecology9 利用字段值动态控制明细表显示与隐藏

本文详细介绍了在泛微ecology9中,如何利用WfForm.bindFieldChangeEvent监听字段变化,结合jQuery动态控制明细表显示与隐藏的实战方法。通过五步操作,可实现根据字段值(如报销类型)智能切换明细表,提升表单交互体验与开发效率,并确保PC与移动端完美兼容。

7z8x2c4v6b9的博客 585

常用MD5算法代码

常用的MD5算法代码日期: 2014年8月4日作者: 铁锚MD5,全称为 Message Digest Algorithm 5(消息摘要算法第五版).详情请参考 维基百科:MD5 MD5加密后是一个字节数组, 但我们一般是取其十六进制的字符串表示法,当然,十六进制数字符串是区分大小写,在 mysql数据库,Java,和JavaScript语言中,一般是使用小写的字符串来表示, 而在 Oracle数

铁锚的优快云博客 1万+

Halcon手眼标定实战:九点标定法从入门到精通(附完整代码)

本文详细介绍了Halcon环境下九点标定法的完整实现流程,从基础概念到实战技巧,帮助开发者快速掌握手眼标定技术。通过精确采集图像坐标与机械坐标,计算仿射变换矩阵,实现相机与机械臂坐标系的精确映射,适用于工业自动化中的平面定位场景。

v4w5x6的博客 411

MD5的C源码

关于MD5的C++源码,请参考我的另外一篇文章:MD5的C++源码 md5c.h: /* POINTER defines a generic pointer type */ typedef unsigned char * POINTER; /* UINT2 defines a two byte word */ //typedef unsigned short int UINT

放飞梦想,成就未来 2万+

Dify平台+Excel批量分析实战:5分钟搞定大模型数据处理(附完整代码)

本文详细介绍了如何利用Dify平台的数据集功能,结合Excel和Python脚本,快速构建大模型批量数据处理流水线。通过实战案例演示,读者可在5分钟内完成客户反馈情感分析、产品文案生成等任务,实现从原始数据到结构化洞察的高效转化,极大提升工作效率。

3a9bq4r8t2y的博客 316

计算机视觉:相机模型与参数标定

一、相机投影模型 1、小孔成像 2、相机模型中的四个平面坐标系 3、像主点偏移 4、畸变现象与内参矩阵 5、外参矩阵 二、相机标定:张正友棋盘格标定法 1、张正友棋盘格标定法描述 2、计算外参和内参 2.1 计算单应性矩阵H 2.2 计算内参数矩阵 2.3 计算外参数矩阵 3、实验:MATLAB实现 3.1 实验数据 3.2实验过程 3.3 实验结果 4、实验:OpenCV实现 4.1 实现代码 4.2 实验结果 5、实验分析与总结

DreamWendy的博客 2514

MD5算法解析

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。  MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始

Chars 747

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1149

C语言MD5源码及实例

C语言 MD5源码 md5c.h: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 /* POINTER defines a generic pointer type */  typedef unsigned cha

huabiaochen的博客 6972

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

算法 MD5

头文件定义(MD5.h): #ifndef MD5_H #define MD5_H #include <string> #include <fstream> using std::ifstream; using namespace std; /* MD5 declaration. */ class MD5 { /* Type define */ typedef unsigned char byte; typedef unsigned int uint

老狼的专栏 284

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java MD5加密/解密(附带源码)

java MD5加密/解密(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1411

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MD5加密

一、什么是MD5加密 1991年,Rivest开发出技术上更为趋近成熟的md5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。Den boer和Bosselaers曾发现MD5算法中的假冲突(pseu...

zzxv587的博客 219

java md5 加密,转载自:水清云淡

MD5算法称作是散列算法或者称作哈希算法。 MD5是一种单向不可逆的算法,也就是说MD5算法可以用来加密信息内容,但是不能够对经MD5算法加密后的密文进行还原。 MD5算法是能将任意长度的一段信息生成具有固定长度大小的信息摘要,并且该摘要对此信息具有唯一性,那么MD5算法被用于加密信息也是完全可以的,只是不能够对MD5加密后的密文进行还原,毕竟以信息摘要的方式去提取一段信息内容的过程中是有...

博采众长 213

C# | 上位机开发新手指南(六)摘要算法

你知道摘要算法么?它在保障数据安全方面非常有用!它能够将任意长度的数据转换成固定长度的消息摘要,从而确保数据的完整性和可靠性。比如说,我们下载软件的时候,就可以用摘要算法来检验软件是否被篡改,保障我们的电脑安全。那这个算法的工作原理是怎样的呢?大致就是通过一系列复杂的计算,将原始数据转换为一个固定长度的摘要信息。而且无论输入的数据大小,输出的摘要信息长度都是一样的。那么摘要算法有什么用处呢?比如数字签名,确保数据的来源和内容没有被篡改。还有密码学等领域的应用,可以说是非常厉害了!

猿长大人 1339

基本算法-MD5

一,描述        MD5报文摘要生成算法在数据安全和通信领域有着广泛的应用,最早应用于信息传输过程中防止数据被中间修改,一直到现在的存储领域做为文件的指纹来实现一些更加复杂的功能,比如视频网站,新视频上传的时候会生成一个视频对应的MD5指纹,后继再有同样的视频上传的时候通过md5指纹就可以判断当前上传的视频是否已经被上传过,通过这种办法即可实现秒传视频。 二,库      linux的

Searcher_Recommeder的博客 847
上一篇: SHA-1摘要算法源码
下一篇: DES加密算法源码
barbin
博客等级 码龄11年 0粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值