sip协议注册时response值的计算方法

时间:2023-03-09 23:47:03
sip协议注册时response值的计算方法

  sip注册时有四个步骤,

  1.客户端向服务端发送不带Authorization字段的注册请求

  2.服务端回401,在回复消息头中带WWW_Authorization

  3.客户端向服务端发送带Authorization字段注册请求,Authorization字段中的response信息是

   根据收到的WWW_Authorization中的信息和本地的一个密码信息计算出来的。

  4.服务端会自己计算一个Response值,和客户端发来的对比,一样的会回客户端一个200OK,表示

   注册成功。比对不一样回其他错误码给客户端。

  

  response的计算方法:

  1)HASH1=MD5( username:realm:passwd)

  2)HASH2=MD5(method:uri)

  3)response=MD5(HA1:nonce:HA2)

  exosip/osip是通过下面的两个函数计算response,该exosip/osip的版本是2-4.1.0。

  char HA1[265],HA2[265];

  DigestCalcHA1(0, pszUser, realm_.c_str(), passwd, 0, 0, HA1);

  该函数通过pszUser,realm, passwd三个值产生HA1

  pszUser, realm是客户端发送过来的。passwd是服务端本地的,其值事先和客户端定好的,客户端的发来的response值也要通过他自己本地

  的pwd来计算。

  DigestCalcResponse(HA1, pszNonceFromHeader,pszNonceCount, pszCNonce, pszopo, 1, pszMethod, pszUri, HA2, Response);

  先通过method:uri产生HA2

  如果参数pszopo是空,通过HA1:nonce:HA2产生Response

  

参考:GB/T28181-2011 《安全防范视频监控联网系统信息传输、交换、控制技术要求》

   http://blog.chinaunix.net/uid-26212859-id-3485297.html