2017-08-27 4 views
-2

は、私の場合です:Python - 改行を引き起こす "wb"のテキストファイルに "b n"を書くのを避けるにはどうしたらいいですか?ここ

# Small hashing script example 
import hashlib 
import os 

def original_pass(Password): 
    salt = os.urandom(64) 
    hashed = hashlib.pbkdf2_hmac("sha512", Password.encode(), salt, 300000, dklen = 124) 
    with open("Hash.txt", "wb") as file: 
     file.write(salt + b"\n" + hashed) 
     file.close() 

def check_pass(New_Pass): 
    with open("Hash.txt", "rb") as file: 
      f = file.readlines() 
      print (f) 
      check_hash = hashlib.pbkdf2_hmac("sha512", New_Pass.encode(), f[0].strip(b"\n"), 300000, dklen = 124) 
      file.close()  
    if check_hash == f[1]: 
     return True 
    else: 
     return False 

original_pass("Password") 
print (check_pass("Password")) 

私の問題は、時折、ハッシュは、\ nとして文字が含まれていることです。例えば。 b "x004 \ n4 \ no5"と入力します。この行は、b "x004 \ n"、b "4 \ no5"に分割されます。これは塩のようなものを読み込もうとするとエラーになります。なぜなら、それは複数の部分に分割される可能性があるからです。そのように読むのを避ける方法はありますか?

重複発言に対処するために

私はバイト、ここではなく、文字列の正規の文字列と特異的に取り扱っております。どちらも別のデータ型です。ここで見られるように、python 3(私が使用しているバージョン)のmoresoはWhat is the difference between a string and a byte string?です。この区別は、.encode()などの特定の文字列メソッドがバイト文字列で機能しないことを意味します。このように、固定長塩の知識を使用してそこに私はなど、扱うとそれらがどのように操作されていたデータの種類に明確な違いが...ある@Blckknghtコメントに基づいて

+1

なぜとにかく、改行で分割していますか? – user2357112

+5

例えば、 'b '\ n" 'byte - base64を使わない表現でハッシュをエンコードすることができます。あるいは、改行を使って各ハッシュが終了する場所を決めることができます。 – user2357112

+0

[生の文字列をキャストするpython](https://stackoverflow.com/questions/2428117/casting-raw-strings-python)の可能な複製 –

答えて

0

、コード:

import hashlib 
import os 

SALT_LEN = 64 

def hash(password,salt): 
    return hashlib.pbkdf2_hmac('sha512',password.encode(),salt,300000,dklen=124) 

def original_pass(password): 
    salt = os.urandom(SALT_LEN) 
    hashed = hash(password,salt)  
    with open('hash.bin','wb') as file: 
     file.write(salt + hashed) 

def check_pass(password): 
    with open('hash.bin','rb') as file: 
     data = file.read() 
    salt,hashed = data[:SALT_LEN],data[SALT_LEN:] 
    check_hash = hash(password,salt)  
    return check_hash == hashed 

original_pass('Password') 
print(check_pass('Password')) 
関連する問題