摄像头的IP地址192.168.1.64,账号:admin,密码:admin123
在登陆之前,我们需要先拿到一些会话参数,主要用于数据的加密,这个接口是

/ISAPI/Security/sessionLogin/capabilities?username={用户名}

拼接好的请求地址是这样:

http://192.168.1.64/ISAPI/Security/sessionLogin/capabilities?username=admin

通过GET方法请求之后,会得到以下返回信息:

<?xml version="1.0" encoding="UTF-8"?>
<SessionLoginCap version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<sessionID>e2ee72f8cd625dbfe5c6</sessionID>
<challenge>f906a980cbcb1398e89dc8333f1d1afa</challenge>
<iterations>100</iterations>
<isIrreversible>true</isIrreversible>
<salt>25e1327e4ef0350f31e11240abfc23b8ba801cbef0599ed22eb9a7d573cdfe64</salt>
</SessionLoginCap>

其中sessionID,challenge,iterations,salt这几个参数是我们需要的.

sessionID 为本次会话ID,需要回传进行认证.
challenge 加密质疑
iterations 为hash加密次数
salt 加盐处理

接下来我们就可以对明文密码进行加密处理了,首先确认加密用的算法为[SHA256]
加密算法原型

void String EnCodePecmd(String UserName, String PassWord, String challenge, String salt, int iterations)
{
String hash_pwd = "";
hash_pwd = sha256(UserName + salt + PassWord);
hash_pwd = sha256(hash_pwd + challenge);
for (int i = 2; i < iterations; i++)
{
    hash_pwd = sha256(hash_pwd );    
}
return hash_pwd;
}

通过以上算法,我们得到了一个加密后的密码密文,将这个密文按一下方法进行拼接.

<SessionLogin><userName>用户名</userName><password>密码密文</password><sessionID>会话ID</sessionID></SessionLogin>

数据拼接好之后,我们需要进行提交,提交的地址为:

ISAPI/Security/sessionLogin?timeStamp={时间戳}

拼接好的连接是这样的,后面带上

http://192.168.100.99/ISAPI/Security/sessionLogin?timeStamp=1648999455456

通过POST方式将刚才拼接好的数据进行提交即可,如果成功将返回以下内容

<?xml version="1.0" encoding="UTF-8"?>
<SessionLogin>
<statusValue>200</statusValue>
<statusString>OK</statusString>
<isSupportLoginTiming>false</isSupportLoginTiming>
<sessionID>e899d03225b703cc460e</sessionID>
</SessionLogin>

这时你将会拿到Cookies进行其它操作了.

标签: none

添加新评论