簡體   English   中英

n *(b(a))的python3遞歸函數

[英]python3 recursive function of n * (b(a))

我正在嘗試編寫一個函數,該函數將對密鑰進行遞歸哈希n次,在sha224和sha256之間交替。 每次迭代都將是hash_256(hash_224)-密鑰的hash224的hash256-因此它將產生n *(hash_256(hash_224))。 但是,我是編碼的新手,無法弄清楚如何使用這些參數編寫遞歸函數。

import hashlib

def shasum(key, n):
key = str(key).encode('utf-8')

hash_a = hashlib.sha224(key).hexdigest().encode('utf-8'))
hash_b = hashlib.sha256(hash_a).hexdigest()

if n == 0 or 1:
return hash_b #one iteration of 256(224)
else:
return n-1
return hash_b #stuck here

編輯:現在它的行為就像一個數字生成器。 怎么了?

import hashlib

 n = 0

def sha480(seed):
hashed_224 = str(hashlib.sha224(seed)).encode('utf-8')
hashed_256 = hashlib.sha256(hashed_224).hexdigest()
hashed_480 = str(hashed_256)
print("hash: " + hashed_480)

def repeater(key, n):
if n == 0:
 return key
 seed = str(key).encode('utf-8')
while n > 0:
return sha480(repeater(seed, n-1))

repeater('what', 2)

您根本沒有遞歸調用。 您可以將其更改為:

def hash_a(key):
    return hashlib.sha224(key).hexdigest().encode('utf-8')

def hash_b(key):
    return hashlib.sha256(key).hexdigest()

def shasum(key, n):
    if n == 0:  # base case: 0 iterations -> return key itself
        return key
    key = str(key).encode('utf-8')
    return hash_b(hash_a(shasum(key, n - 1)))  # recursve call

旁注: n == 0 or 1等於(n == 0) or 1 ,始終為true。 對於該模式, n in (0, 1)使用n == 0 or n == 1或更短的n in (0, 1)

您的代碼幾乎是正確的。 只是解決了一些小問題,如下所示

import hashlib

def shasum(key, n):
    print ("n: " + str(n))
    key = str(key).encode('utf-8')

    hash_a = hashlib.sha224(key).hexdigest().encode('utf-8')
    print ("hash_a: " + str(hash_a))
    hash_b = hashlib.sha256(hash_a).hexdigest()
    print ("hash_b: " + str(hash_b))
    if n == 0:
        return hash_b #one iteration of 256(224)
    else:
        return shasum(hash_b, n-1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM