string.Format("rspauth={0}",
public string rspauth(string Username, string Realm, string Password, string Nonce, string Cnonce,
string m_Authzid, string m_DigestUri, string Qop, string m_Nc)
{
// HEX( KD ( HEX(H(A1)),
// { nonce-value, ":" nc-value, ":",
// cnonce-value, ":", qop-value, ":", HEX(H(A2)) }))
//If authzid is specified, then A1 is
// A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
// ":", nonce-value, ":", cnonce-value, ":", authzid-value }
//If authzid is not specified, then A1 is
// A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
// ":", nonce-value, ":", cnonce-value }
// The server receives and validates the "digest-response". The server
//checks that the nonce-count is "00000001". If it supports subsequent
//authentication (see section 2.2), it saves the value of the nonce and
//the nonce-count. It sends a message formatted as follows:
// response-auth = "rspauth" "=" response-value
//where response-value is calculated as above, using the values sent in
//step two, except that if qop is "auth", then A2 is
// A2 = { ":", digest-uri-value }
//And if qop is "auth-int" or "auth-conf" then A2 is
// A2 = { ":", digest-uri-value, ":00000000000000000000000000000000" }
byte[] H1;
byte[] H2;
byte[] H3;
// byte[] temp;
string A1;
string A2;
string A3;
string p1;
string p2;
var sb = new StringBuilder();
sb.Append(Username);
sb.Append(":");
sb.Append(Realm);
sb.Append(":");
sb.Append(Password);
H1 = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
sb.Remove(0, sb.Length);
sb.Append(":");
sb.Append(Nonce);
sb.Append(":");
sb.Append(Cnonce);
if (m_Authzid != null)
{
sb.Append(":");
sb.Append(m_Authzid);
}
A1 = sb.ToString();
byte[] bA1 = Encoding.ASCII.GetBytes(A1);
var bH1A1 = new byte[H1.Length + bA1.Length];
// Array.Copy(H1, bH1A1, H1.Length);
Array.Copy(H1, 0, bH1A1, 0, H1.Length);
Array.Copy(bA1, 0, bH1A1, H1.Length, bA1.Length);
H1 = new MD5CryptoServiceProvider().ComputeHash(bH1A1);
// Console.WriteLine(util.Hash.HexToString(H1));
sb.Remove(0, sb.Length);
sb.Append(":");
sb.Append(m_DigestUri);
//if (Qop.CompareTo("auth") != 0)
//{
// sb.Append(":00000000000000000000000000000000");
//}
A2 = sb.ToString();
//H2 = Encoding.ASCII.GetBytes(A2);
H2 = Encoding.UTF8.GetBytes(A2);
H2 = new MD5CryptoServiceProvider().ComputeHash(H2);
// create p1 and p2 as the hex representation of H1 and H2
p1 = Hash.HexToString(H1).ToLower();
p2 = Hash.HexToString(H2).ToLower();
sb.Remove(0, sb.Length);
sb.Append(p1);
sb.Append(":");
sb.Append(Nonce);
sb.Append(":");
sb.Append(m_Nc);
sb.Append(":");
sb.Append(Cnonce);
sb.Append(":");
sb.Append(Qop);
sb.Append(":");
sb.Append(p2);
A3 = sb.ToString();
H3 = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(A3));
var m_Response = Hash.HexToString(H3).ToLower();
return m_Response;
}
string.Format("rspauth={0}",的更多相关文章
- C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}等等
int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); / ...
- String.Format数字格式化输出 {0:N2} {0:D2} {0:C2
//格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = ...
- 【转】C# String.Format数字格式化输出各种转换{0:N2} {0:D2} {0:C2}...
; //格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = & ...
- C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfadsf{0}adsfasdf",a);// ...
- String.Format数字格式化输出 {0:N2} {0:D2} {0:C2} (转)
String.Format数字格式化输出 {:N2} {:D2} {:C2} (转) //格式为sring输出 // Label1.Text = string.Format("asdfads ...
- c#字符显示转换{0:d} string.Format()
这一篇实际和前几个月写的没什么本质上的区别.但是这篇更明确一点,学起来easy c#字符显示转换{0:d} C#:String.Format数字格式化输出 : int a = 12345678; // ...
- C# String.Format格式化json字符串中包含"{" "}"报错问题
json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, st ...
- $是对string.Format的简化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 如何在string.Format()方法中输出大括号
在string.Format参数中,大括号{}是有特殊意义的符号,但是如果我们希望最终的结果中包含大括号({}),那么我们需要怎么做呢?是”\{”吗?很遗憾,运行时,会给你一个Exception的!正 ...
随机推荐
- 从HiveQL到MapReduce job过程简析
一.简述 HiveQL是一种声明式语言,用户提交查询,而Hive会将其转换成MapReduce job,如下图.一般来说大部分时间可以无视这个执行过程的内部逻辑,但是如果能了解这些底层实现细节,在调优 ...
- GRUB使用说明
从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序.相信LILO对于大家来说都是很熟悉的.这次Red Hat Li ...
- windows下 apache,php,mysql,phpadmin集成化安装
1.appserv 直接下载安装, 2.linux环境下下载安装LAMP
- 从零开始安装hue(原创-转载注明出处)
hue安装需要从github上面下载源码,进行编译安装.github上面给出的安装教程很简单 然而实际上在安装的过程中遇到了无数个坑,下面开始真正意义上的从零开始安装hue. 安装环境: centOS ...
- XSS的原理分析与解剖:第三章(技巧篇)【转】
0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/art ...
- 爬虫 之 scrapy-redis组件
scrapy-redis组件 scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dup ...
- block functions区块函数插件的定义与使用
在插件目录plugins里新建文件 block.插件名.php文件(如 block.插件名.php) 例:block.test2.php <?php function smarty_block_ ...
- ServletRequest面试题
使用request获得请求行:String getmethod():获得请求的资源:String getcontextpath():----web应用名称request是一个域对象request完成请 ...
- 4.4.4 无锁的对象引用:AtomicReference和AtomicStampedReference
AtomicReference 这个类和AtomicInteger非常类似,只是AtomicReference对应普通的对象引用,而AtomicInteger 它是对整数的封装,它的方法如下 对wea ...
- UVa 11996 Jewel Magic (splay + Hash + 二分)
题意:给定一个长度为n的01串,你的任务是依次执行如表所示的m条指令: 1 p c 在第p个字符后插入字符,p = 0表示在整个字符串之前插入2 p 删除第p个字符,后面的字符往前移3 p1 p2反转 ...