3

我正在处理发送“GetDeviceInformation”的 ONVIF。这是必需的 wsse:UsernameToken。搜索权威数据后,有两个公式:

(1) by "ONVIF-Core-Specification-v241.pdf", "5.12.2.1 密码推导"

PE_UA = base64(HMAC_SHA-1(UA+P_UA,NEP+”ONVIF password”))

(2)通过WEB协议的soap

Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) )

我很困惑!!哪一个是正确的?

此外,当我通过wireshark测试ONVIF测试工具时

我得到的XML:

<wsse:UsernameToken>
<wsse:Username>admin</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">lu9ywjDwSt8oW7M4tMjCb50/xRg=</wsse:Password>
<wsse:Nonce>TgBYFHxSc3Oo8yPzwnQn8A==</wsse:Nonce>
<wsu:Created>2014-06-20T04:41:45Z</wsu:Created>
</wsse:UsernameToken>

好的,那我试着通过这些数据找出公式。

a> 用户名:“管理员”

b> 密码:“pass”(非熵)

c> 随机数:“TgBYFHxSc3Oo8yPzwnQn8A==”

d> 创建:“2014-06-20T04:41:45Z”

以某种方式获得最终密码:“ lu9ywjDwSt8oW7M4tMjCb50/xRg=

“nonce”可以由 Base64 转换,所以原始应该是“4E0058147C527373A8F323F3C27427F0”

我试过用

base64(SHA1("TgBYFHxSc3Oo8yPzwnQn8A==2014-06-12T04:03:45Zpass"))

或者

base64(SHA1("4E0058147C527373A8F323F3C27427F0==2014-06-12T04:03:45Zpass"))

但我仍然无法获得测试工具发送的密码为“lu9ywjDwSt8oW7M4tMjCb50/xRg=”

任何人都可以帮助我弄清楚 ONVIF 测试工具使用的确切公式是什么?

需要你的帮助!!!谢谢!!

4

1 回答 1

3

最后,设备发送OK给我!

参考gSoap后

首先,公式是:

Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) )

对于 Nonce,它应该是 20 个字节的随机“数字”值:

char caNonceTest[20]={0x9E,0xBD,0xBB,0x53,0x7C,0x96,0xB4,0xC1,0xCE,0xEB,
                      0xFB,0x06,0x17,0x31,0x41,0x4E,0x5B,0x68,0x86,0x93};

它可以通过任何方法生成(可以生成事件)

得到后,caNonceTest,如上,字符串应该看起来像 "艋|蹉鋿1AN[h?昍昍昍昍"

对于发送到设备的 XML,base64 应该类似于 "nr27U3yWtMHO6/gGFzFBTltohpPMzMzMzMzMzBQ="

这是正确格式的关键!(不是 ASCII 字符串!)此外,只需像caNonceTest一样输入 sha-1 函数(无需转换为 Base64)

对于创建的密码和密码,只需以字符串格式输入 sha-1(例如“2014-07-08T09:26:13Z”和“pass”)

那么,世界和平!

于 2014-07-08T10:09:55.867 回答