我正在研究发送“GetDeviceInformation”的ONVIF。这需要wsse:UsernameToken。 在搜索权限数据后,有两个faormula:
(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协议的肥皂
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&GT;用户名:“admin”
B个密码:“通过”(取消熵)
c取代; Nonce:“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测试工具使用的确切公式是什么?
需要你的帮助!!!谢谢!
答案 0 :(得分:1)
最后,设备发送给我好!
参考gSoap后
首先,公式为:
Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) )
对于Nonce,它应该是20字节随机&#34;数字&#34;价值为:
char caNonceTest[20]={0x9E,0xBD,0xBB,0x53,0x7C,0x96,0xB4,0xC1,0xCE,0xEB,
0xFB,0x06,0x17,0x31,0x41,0x4E,0x5B,0x68,0x86,0x93};
它可以通过任何方法生成(事件可以成为它)
获得后, caNonceTest ,如上所述,该字符串应该看起来像&#34;艋|蹉鋿1AN [h?昍昍昍昍&#34;
并且对于发送到设备的XML,base64应该像&#34; nr27U3yWtMHO6 / gGFzFBTltohpPMzMzMzMzMzBQ =&#34;
这是正确进行的关键点! (不是ASCII字符串!) 此外,只需输入sha-1函数就像 caNonceTest 一样(不需要转换为Base64)
对于创建的密码,只需将sha-1作为字符串格式提供(例如&#34; 2014-07-08T09:26:13Z&#34;&#34;传递&#34;)
那么,世界和平!