58 votes

Implementaion HMAC-SHA1 en python

Je suis en train d'utiliser OAuth d'un site web, ce qui nécessite la signature de la méthode pour être "HMAC-SHA1" seulement.

Je me demande comment mettre en Python?

95voto

Jon Nylander Points 4113

Pseudocodish:

def sign_request():
    from hashlib import sha1
    import hmac

    # If you dont have a token yet, the key should be only "CONSUMER_SECRET&"
    key = "CONSUMER_SECRET&TOKEN_SECRET" 

    # The Base String as specified here: 
    raw = "BASE_STRING" # as specified by oauth

    hashed = hmac.new(key, raw, sha1)

    # The signature
    return hashed.digest().encode("base64").rstrip('\n')

La Signature des erreurs résidez habituellement dans la base de la chaîne, assurez-vous de le comprendre (comme indiqué par la OAuth1.0 spec ici: http://tools.ietf.org/html/draft-hammer-oauth-10#section-3.4.1).

Les entrées suivantes sont utilisées pour générer la Signature de la Base de la Chaîne:

  1. Méthode HTTP (par exemple GET)
  2. Chemin d'accès (par exemple http://photos.example.net/photos)
  3. Paramètres, par ordre alphabétique, comme (des sauts de ligne pour des raisons de lisibilité): file=vacation.jpg&oauth_consumer_key=dpf43f3p2l4k3l03& oauth_nonce=kllo9940pd9333jh&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1191242096& oauth_token=nnch734d00sl2jdk& oauth_version=1.0&size=original

Concaténer et les encoder tout le toutim, et il se termine de la manière suivante:

GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26 oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26 oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26 oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal

8voto

Andrey Atapin Points 1829

2voto

Till Points 1806

Il existe plusieurs bibliothèques python disponible à la oauth site web, mais si vous êtes simplement intéressé à une mise en œuvre spécifique, vous pourriez avoir un coup d'oeil à l'un d'entre eux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X