2014-06-27 3 views
2

Je travaille sur ONVIF d'envoyer "GetDeviceInformation". C'est nécessaire wsse: UsernameToken. Après la recherche de données pour l'autorité, il y a deux faormula:quelle est la formule de ONVIF #PasswordDigest

(1) par "ONVIF-Core-Spécification-v241.pdf", "5.12.2.1 dérivation Mot de passe"

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

(2) par savon de protocole WEB

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

Je suis confus !! lequel est correct?

De plus, quand je outil de test de test ONVIF par Wireshark

XML je suis comme:

<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> 

ok, alors je l'ai essayer de comprendre la formule par ces données .

a> nom d'utilisateur: "admin"

b> Mot de passe: "pass" (non entropie)

c> nonce: "TgBYFHxSc3Oo8yPzwnQn8A =="

d> créé: "2014-06-20T04: 41: 45Z"

en quelque sorte pour obtenir la fina l mot de passe: "lu9ywjDwSt8oW7M4tMjCb50/Xrg ="

le "nonce" peut convertir en base64 si l'original doit être "4E0058147C527373A8F323F3C27427F0"

J'ai essayez d'utiliser

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

ou

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

mais je ne peux toujours pas envoyer le mot de passe par l'outil de test « lu9ywjDwSt8oW7M4tMjCb50/Xrg = »

quelqu'un pourrait m'aider à comprendre quelle est la formule exacte utilisée par l'outil de test ONVIF?

Avez-vous besoin de votre aide !!! Merci!!

Répondre

1

Enfin, l'appareil m'envoie OK!

Après référence à gSOAP

Au premier, la formule est:

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

pour le Nonce, il devrait être de 20 octets valeur "numérique" aléatoire:

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

il pourrait être généré par n'importe quelle méthode (l'événement pourrait être fait)

après l'avoir obtenu, caNonceTest, comme ci-dessus, la chaîne doit être regardé comme " 艋 |?  蹉 鋿 1AN [h 昍 昍 昍 昍"

et XML envoyer à l'appareil, les base64 devrait être comme « nr27U3yWtMHO6/gGFzFBTltohpPMzMzMzMzMzBQ = "

c'est le point clé du foramte correct! (Non chaîne ASCII!) De plus, juste alimenter la fonction sha-1 comme exactement comme le caNonceTest (pas besoin de convertir en base64)

pour la création et mot de passe, nourrir sha-1 sous forme de chaîne format (par exemple "2014-07-08T09: 26: 13Z" et "passe")

alors, paix du monde!

+0

Merci beaucoup! Cela m'a aidé à comprendre mon problème. Juste pour le bénéfice des autres à l'avenir, j'ai rassemblé un aperçu avec un exemple de code: https://gist.github.com/lsowen/1a46f9d5fc026e6efc7d – lsowen

Questions connexes