2013-12-12 62 views
1

我不想改變我已經寫過的代碼,儘管它可能真的效率低下或者其他。如何爲Python製作tripcode生成器?

import string 
import random 

prompt=raw_input("Name") 
print "Code:",prompt 
a=string.ascii_letters+string.digits+string.digits 
trip='!%s%s%s%s%s%s%s%s%s%s' % (random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a),random.choice(a)) 
print trip 

我想要做的是使一個tripcode發生器,使這個節目,我寫了一首歌,就是始終與輸入一致的輸出端產生一個代碼。所以每次有人在提示中鍵入一個單詞時,他們總是會得到相同的隨機生成的代碼。

因此,如果有人在輸入中鍵入「python」,輸出將始終爲!gT3rF39hjj或一些隨機生成的行程碼。

對不起,如果我不清楚。

+0

使用散列或HMAC怎麼樣? – smeso

回答

1

糟糕!我的第一個回答非常愚蠢 - 每次通過一個名稱時都會給出相同的答案,但僅僅是因爲它每次都會返回相同的代碼。相反,我們可以根據名稱設置種子(請參閱文檔here)。例如:

prompt=raw_input("Name") 
random.seed(prompt) 

產生

~/coding$ python tripcode.py 
NameFred 
Code: Fred 
!yjmjKnTwC8 
~/coding$ python tripcode.py 
NameFred 
Code: Fred 
!yjmjKnTwC8 
~/coding$ python tripcode.py 
NameBob 
Code: Bob 
!C7im8B12jo 

[BTW,prompt將得到更好的命名name,是不是?]

+0

哦,真棒,謝謝。我會嘗試一下。 – LillySatou

+0

無論用戶輸入什麼內容,這將打印相同的旅行代碼。 – Kevin

1

您可以使用hashlib產生的幾乎唯一摘要用戶輸入的數據。

import hashlib 

name = raw_input("Name: ") 
trip = hashlib.md5(name).hexdigest() 
print trip 

結果:

C:\programs>get_trip.py 
Name: Kevin 
f1cd318e412b5f7226e5f377a9544ff7 

C:\programs>get_trip.py 
Name: George 
578ad8e10dc4edb52ff2bd4ec9bc93a3 

C:\programs>get_trip.py 
Name: Kevin 
f1cd318e412b5f7226e5f377a9544ff7 
2

有關使用散列或HMAC什麼?

例如:

import base64 
import hmac 
import hashlib 

prompt = raw_input('Name') 
print 'Code:',prompt 
trip = base64.b64encode(hmac.new('somekey', prompt, hashlib.sha1).digest()) 
print trip 

只要密鑰是保密的輸出是不可預知的。

+0

+1。如果通過「隨機」,OP意味着「如果只知道行程代碼,則無法猜測純文本」,那麼使用鍵是個好主意。當涉及到暴力攻擊時,這使得它比我的答案更具抵抗性。 – Kevin