C语言编的MD5主程序

程序

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <time.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "../md5/md5.h"

#define T1 0xd76aa478
#define T2 0xe8c7b756
#define T3 0x242070db
#define T4 0xc1bdceee
#define T5 0xf57c0faf
#define T6 0x4787c62a
#define T7 0xa8304613
#define T8 0xfd469501
#define T9 0x698098d8
#define T10 0x8b44f7af
#define T11 0xffff5bb1
#define T12 0x895cd7be
#define T13 0x6b901122
#define T14 0xfd987193
#define T15 0xa679438e
#define T16 0x49b40821
#define T17 0xf61e2562
#define T18 0xc040b340
#define T19 0x265e5a51
#define T20 0xe9b6c7aa
#define T21 0xd62f105d
#define T22 0x02441453
#define T23 0xd8a1e681
#define T24 0xe7d3fbc8
#define T25 0x21e1cde6
#define T26 0xc33707d6
#define T27 0xf4d50d87
#define T28 0x455a14ed
#define T29 0xa9e3e905
#define T30 0xfcefa3f8
#define T31 0x676f02d9
#define T32 0x8d2a4c8a
#define T33 0xfffa3942
#define T34 0x8771f681
#define T35 0x6d9d6122
#define T36 0xfde5380c
#define T37 0xa4beea44
#define T38 0x4bdecfa9
#define T39 0xf6bb4b60
#define T40 0xbebfbc70
#define T41 0x289b7ec6
#define T42 0xeaa127fa
#define T43 0xd4ef3085
#define T44 0x04881d05
#define T45 0xd9d4d039
#define T46 0xe6db99e5
#define T47 0x1fa27cf8
#define T48 0xc4ac5665
#define T49 0xf4292244
#define T50 0x432aff97
#define T51 0xab9423a7
#define T52 0xfc93a039
#define T53 0x655b59c3
#define T54 0x8f0ccc92
#define T55 0xffeff47d
#define T56 0x85845dd1
#define T57 0x6fa87e4f
#define T58 0xfe2ce6e0
#define T59 0xa3014314
#define T60 0x4e0811a1
#define T61 0xf7537e82
#define T62 0xbd3af235
#define T63 0x2ad7d2bb
#define T64 0xeb86d391

static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
{
    md5_word_t
    a = pms->abcd[0], b = pms->abcd[1],
    c = pms->abcd[2], d = pms->abcd[3];
    md5_word_t t;

#ifndef ARCH_IS_BIG_ENDIAN
# define ARCH_IS_BIG_ENDIAN 1    /* slower, default implementation */
#endif
#if ARCH_IS_BIG_ENDIAN

    /*
     * On big-endian machines, we must arrange the bytes in the right
     * order.  (This also works on machines of unknown byte order.)
     */
    md5_word_t X[16];
    const md5_byte_t *xp = data;
    int i;

    for (i = 0; i < 16; ++i, xp += 4)
    X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);

#else  /* !ARCH_IS_BIG_ENDIAN */

    /*
     * On little-endian machines, we can process properly aligned data
     * without copying it.
     */
    md5_word_t xbuf[16];
    const md5_word_t *X;

    if (!((data - (const md5_byte_t *)0) & 3)) {
    /* data are properly aligned */
    X = (const md5_word_t *)data;
    } else {
    /* not aligned */
    memcpy(xbuf, data, 64);
    X = xbuf;
    }
#endif

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

    /* Round 1. */
    /* Let [abcd k s i] denote the operation
       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define SET(a, b, c, d, k, s, Ti)\
  t = a + F(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b
    /* Do the following 16 operations. */
    SET(a, b, c, d,  0,  7, &n

时间: 2025-01-25 05:31:11

C语言编的MD5主程序的相关文章

C语言编的MD5头文件

/*  Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.   This software is provided 'as-is', without any express or implied  warranty.  In no event will the authors be held liable for any damages  arising from the use of this software.   Pe

c语言编的秦九韶公式,纳尼?结果为什么是0.000000?大家帮我看下,谢谢。

问题描述 c语言编的秦九韶公式,纳尼?结果为什么是0.000000?大家帮我看下,谢谢. #include #include double Area(int i,int j,int k) { double m,s; s=(i+j+k)/2; m=sqrt(s*(s-i)*(s-j)*(s-k)); return m; } int main() { int a,b,c, double M; printf("please input a,b,c:n"); scanf("%d%d%

求解决-怎么用c语言编这个代码,求指教

问题描述 怎么用c语言编这个代码,求指教 /**给定四种水果,分别是苹果(apple).梨(pear).桔子(orange).葡萄(grape),单价分别对应为3.00元/公斤.2.50元/公斤.4.10元/公斤.10.20元/公斤. 首先在屏幕上显示以下菜单: [1] apple [2] pear [3] orange [4] grape [0] exit 用户可以输入编号1~4查询对应水果的单价.当连续查询次数超过5次时,程序应自动退出查询:不到5次而用户输入0即退出:输入其他编号,显示价格

c语言-急!用C语言编的一个学生籍贯信息记录簿出现问题

问题描述 急!用C语言编的一个学生籍贯信息记录簿出现问题 用c语言编了一个学生籍贯信息记录簿,发现只要进行一次修改或删除操作,全部信息输出(allselect函数)时,开头就会有学号为-842150451,姓名为屯屯屯屯屯屯,籍贯为屯屯屯屯屯屯的一项,每进行一次就会多出一项,为什么? 能帮忙修改一下吗? 是allselect(全部输出)函数的问题? 还是jgedit(修改)和jgdelete(删除)这两个函数的问题? 这是代码的链接:用vc6编的,默认后缀cpp 帮忙修改一下这段代码吧 解决方案

如何编实心三角形-如何用C语言编一个实心三角形啊

问题描述 如何用C语言编一个实心三角形啊 等边的三角形 不是用*号组成那种 实心的.就跟绘图软件画的那种一样.非常感谢

Android编程之MD5加密算法实例分析_Android

本文实例分析了Android编程之MD5加密算法.分享给大家供大家参考,具体如下: Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包.实际上与J2SE平台一模一样. 算法签名: 复制代码 代码如下: String getMD5(String val) throws NoSuchAlgorithmException 输入一个String(需要加密的文本),得到一个加密输出String(加密后的文本) pa

Android编程之MD5加密算法实例分析

本文实例分析了Android编程之MD5加密算法.分享给大家供大家参考,具体如下: Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包.实际上与J2SE平台一模一样. 算法签名: 复制代码 代码如下:String getMD5(String val) throws NoSuchAlgorithmException 输入一个String(需要加密的文本),得到一个加密输出String(加密后的文本) pac

谁能帮我用C语言编一个学生信息管理系统

问题描述 用C语言实现线性表的基本操作,能创建一个基于学生信息管理的链表,至少包含数据输入.数据输出.数据处理等操作.在主函数里能实现以下功能.运行后出现一个选择提示.可选择的功能有1)创建新的学生信息链表 2)增加一个新的学生信息 3)按学号删除某个学生信息 4)按学号查找某个学生信息 5)可以按照学生成绩对链表排序 6)退出系统补充功能:基础较好的同学可以定义一个SAVE函数保存成score.txt,和一个display函数打开该文件,学生信息要含有学号,姓名,三门成绩,还要计算总分和平均成

HTML语言编码表

语言Language | 编码ISO Code |------- | ------- | Abkhazian| abAfar| aaAfrikaans| afAkan| akAlbanian| sqAmharic| amArabic| arAragonese| anArmenian| hyAssamese |asAvaric |avAvestan| aeAymara |ayAzerbaijani |azBambara| bmBashkir| baBasque| euBelarusian| beB