资源简介
MD5 摘要算法的C语言实现,从 RFC1321 中摘出来的算法实现
代码片段和文件信息
#include “MD5.h“
#include
#include “HTTPDigest.h“
void CvtHex(
IN HASH Bin
OUT HASHHEX Hex
)
{
unsigned short i;
unsigned char j;
for (i = 0; i < HASHLEN; i++) {
j = (Bin[i] >> 4) & 0xf;
if (j <= 9)
Hex[i*2] = (j + ‘0‘);
else
Hex[i*2] = (j + ‘a‘ - 10);
j = Bin[i] & 0xf;
if (j <= 9)
Hex[i*2+1] = (j + ‘0‘);
else
Hex[i*2+1] = (j + ‘a‘ - 10);
};
Hex[HASHHEXLEN] = ‘\0‘;
}
/* calculate H(A1) as per spec */
void
DigestCalcHA1 (IN const char *pszAlg
IN const char *pszUserName
IN const char *pszRealm
IN const char *pszPassword
IN const char *pszNonce
IN const char *pszCNonce
OUT HASHHEX SessionKey)
{
MD5_CTX Md5Ctx;
HASH HA1;
MD5Init (&Md5Ctx);
MD5Update (&Md5Ctx (unsigned char *) pszUserName (unsigned int) strlen (pszUserName));
MD5Update (&Md5Ctx (unsigned char *) “:“ 1);
MD5Update (&Md5Ctx (unsigned char *) pszRealm (unsigned int) strlen (pszRealm));
MD5Update (&Md5Ctx (unsigned char *) “:“ 1);
MD5Update (&Md5Ctx (unsigned char *) pszPassword (unsigned int) strlen (pszPassword));
MD5Final ((unsigned char *) HA1 &Md5Ctx);
if ((pszAlg != NULL) && strcasecmp (pszAlg “md5-sess“) == 0) {
MD5Init (&Md5Ctx);
MD5Update (&Md5Ctx (unsigned char *) HA1 HASHLEN);
MD5Update (&Md5Ctx (unsigned char *) “:“ 1);
MD5Update (&Md5Ctx (unsigned char *) pszNonce (unsigned int) strlen (pszNonce));
MD5Update (&Md5Ctx (unsigned char *) “:“ 1);
MD5Update (&Md5Ctx (unsigned char *) pszCNonce (unsigned int) strlen (pszCNonce));
MD5Final ((unsigned char *) HA1 &Md5Ctx);
}
CvtHex (HA1 SessionKey);
}
/* calculate request-digest/response-digest as per HTTP Digest spec */
void
DigestCalcResponse (IN HASHHEX HA1 /* H(A1) */
IN const char *pszNonce /* nonce from server */
IN const char *pszNonceCount /* 8 hex digits */
IN const char *pszCNonce /* client nonce */
IN const char *pszQop /* qop-value: ““ “auth“ “auth-int“ */
IN int Aka /* Calculating AKAv1-MD5 response */
IN const char *pszMethod /* method from the request */
IN const char *pszDigestUri /* requested URL */
IN HASHHEX HEntity /* H(entity body) if qop=“auth-int“ */
OUT HASHHEX Response
/* request-digest or response-digest */ )
{
MD5_CTX Md5Ctx;
HASH HA2;
HASH RespHash;
HASHHEX HA2Hex;
/* calculate H(A2) */
MD5Init (&Md5Ctx);
MD5Update (&Md5Ctx (unsigned char *) pszMethod (unsigned int) strlen (pszMethod));
- 上一篇:数据结构C语言版期末总复习题
- 下一篇:C++教程完整
相关资源
- 数据结构C语言版期末总复习题
- 背包问题的贪心法C语言实现
- C语言学生通讯录管理系统
- 维吉尼亚密码 C语言
- 原创一次性口令OneTimePasswordC语言源码
- 谭浩强C语言程序设计第三版 word版教
- C语言课程设计之个人财务管理系统
- 212类型的维特比译码在C语言中的实现
- 链表实现多项式加法和乘法C语言实现
- C语言socket/smtp发送邮件,支持附件,
- Windows下纯C语言Socket、smtp发送邮件,
- 邮票问题C语言源码
- 数据结构遍历二叉树算法C语言版(附
- Buddy算法C语言实现
- opencv+vs 实现画中画 c语言
- 彩屏显示 c语言
- c语言课程设计-职工工资管理系统
- 7段数码管动态显示proteus仿真电路及
- 进程调度 时间片轮转调度算法源代码
- 汉明码的编码译码的C语言实现
- Hough变换 C 语言实现
- 状态转换图c语言编译原理
- FFT算法的c语言实现
- n个数冒泡排序法
- C语言课程设计文本编辑器
- 数据结构大作业(C语言)实验报告
- 游程编码C语言实现
- 基于89C51的0-99秒表计8个成绩电路图和
- 最速下降法c语言实现
- 优先级和时间片轮转调度实验算法c语
评论
共有 条评论