2013-11-28 2 views
0

на этом веб-адресе есть некоторый код. Я хотел бы знать, как запустить его в python. https://matt.ucc.asn.au/src/pbkdf2.pyКак запустить это в python

#!/usr/bin/env python 

# A simple implementation of pbkdf2 using stock python modules. See RFC2898 
# for details. Basically, it derives a key from a password and salt. 

# (c) 2004 Matt Johnston <matt @ ucc asn au> 
# This code may be freely used, distributed, relicensed, and modified for any 
# purpose. 

# Revision history 
# v0.1 October 2004 - Initial release 
# v0.2 8 March 2007 - Make usable with hashlib in Python 2.5 and use 
# v0.3 ""     the correct digest_size rather than always 20 
# v0.4 13 March 2009 - Mention distribution and relicensing in the copyright 

import sys 
import hmac 
from binascii import hexlify, unhexlify 
from struct import pack 
try: 
    # only in python 2.5 
    import hashlib 
    sha = hashlib.sha1 
    md5 = hashlib.md5 
    sha256 = hashlib.sha256 
except ImportError: 
    # fallback 
    import sha 
    import md5 

# this is what you want to call. 
def pbkdf2(password, salt, itercount, keylen, hashfn = sha): 
    try: 
     # depending whether the hashfn is from hashlib or sha/md5 
     digest_size = hashfn().digest_size 
    except TypeError: 
     digest_size = hashfn.digest_size 
    # l - number of output blocks to produce 
    l = keylen/digest_size 
    if keylen % digest_size != 0: 
     l += 1 

    h = hmac.new(password, None, hashfn) 

    T = "" 
    for i in range(1, l+1): 
     T += pbkdf2_F(h, salt, itercount, i) 

    return T[0: keylen] 

def xorstr(a, b): 
    if len(a) != len(b): 
     raise "xorstr(): lengths differ" 

    ret = '' 
    for i in range(len(a)): 
     ret += chr(ord(a[i])^ord(b[i])) 

    return ret 

def prf(h, data): 
    hm = h.copy() 
    hm.update(data) 
    return hm.digest() 

# Helper as per the spec. h is a hmac which has been created seeded with the 
# password, it will be copy()ed and not modified. 
def pbkdf2_F(h, salt, itercount, blocknum): 
    U = prf(h, salt + pack('>i',blocknum)) 
    T = U 

    for i in range(2, itercount+1): 
     U = prf(h, U) 
     T = xorstr(T, U) 

    return T 


def test(): 
    # test vector from rfc3211 
    password = 'password' 
    salt = unhexlify('1234567878563412') 
    password = 'All n-entities must communicate with other n-entities via n-1 entiteeheehees' 
    itercount = 500 
    keylen = 16 
    ret = pbkdf2(password, salt, itercount, keylen) 
    hexret = ' '.join(map(lambda c: '%02x' % ord(c), ret)).upper() 
    print "key:  %s" % hexret 
    print "expected: 6A 89 70 BF 68 C9 2C AE A8 4A 8D F2 85 10 85 86" 

    # from botan 
    password = unhexlify('6561696D72627A70636F706275736171746B6D77') 
    expect = 'C9A0B2622F13916036E29E7462E206E8BA5B50CE9212752EB8EA2A4AA7B40A4CC1BF' 
    salt = unhexlify('45248F9D0CEBCB86A18243E76C972A1F3B36772A') 
    keylen = 34 
    itercount = 100 
    ret = pbkdf2(password, salt, itercount, keylen) 
    hexret = hexlify(ret).upper() 
    print "key:  %s" % hexret 
    print "expected: %s" % expect 



if __name__ == '__main__': 
    test() 

Резюме проблемы здесь: https://stackoverflow.com/questions/20250731/getting-to-plain-text-from-hex-hash-xor-osx-sha512

Я хотел бы знать, как ловить рыбу, а также получить эту рыбу.

+0

«Я хотел бы знать, как запустить его в python». - как в, «Как я могу научиться писать код, как это?» или «Можете ли вы объяснить этот код, пожалуйста?» или «Я хочу выполнить это на своем компьютере, но я не знаю, как, пожалуйста, помогите».? –

+0

Я должен был написать более четко. Я хотел бы знать, как выполнить этот скрипт в python. Я могу сделать немного в терминале, но не пробовал питон. –

ответ

3

От termial попробуйте запустить [1] [2]:

python pbkdf2.py 

[1] это предполагает, конечно, что вы назвали ваш файл как первоначальный владелец сделал; pbkdf2.py.

[2] перед запуском убедитесь, что вы находитесь в каталоге своего файла.

+2

Я подозреваю, что это не совсем то, что происходит с OP. Но, поскольку вопрос стоит, этот ответ выглядит именно так. –

+1

@BrianCain да, я знаю, что вы имеете в виду, это просто похоже на его единственный способ ответить, не читая его ума. – agconti

+1

И убедитесь, что у вас установлен интерпретатор python и перечислены в переменных окружения :) – aIKid

Смежные вопросы