【问题标题】:TypeError: a bytes-like object is required, not 'str' 'xxx';'xxx'TypeError:需要一个类似字节的对象,而不是 'str' 'xxx';'xxx'
【发布时间】:2020-04-18 08:54:58
【问题描述】:

当我试图在二进制文件中打印一个新行时。 我得到了这个错误。 错误:

Traceback (most recent call last):
  File "F:/PyCharm Python Works/OpenCity/cryptograph/key_creator.py", line 25, in <module>
    create_key('sairam')
  File "F:/PyCharm Python Works/OpenCity/cryptograph/key_creator.py", line 21, in create_key
    f1.write(os.linesep)
TypeError: a bytes-like object is required, not 'str'

key_creator.py

def create_key(x):
    import base64
    import os
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import hashes
    from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

    password_provided = str(x)
    password = password_provided.encode()
    salt = b'\xfb|\xe8\xe0\xe5\x9d\x11\xf5\xbc 8o\xbe<\xd9\x92'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    key = base64.urlsafe_b64encode(kdf.derive(password))
    f1 = open('keys.key', 'ab')
    f1.write(key)
    f1.write(os.linesep)
    f1.close()


create_key('sairam')

请帮助我。 提前致谢。

【问题讨论】:

  • 为什么要在文件末尾写入行分隔符?那是您的错误-文件以二进制模式打开,但行分隔符 char 是字符串
  • @lain Shelvington 我每次创建密钥时都需要打印一个新行,所以

标签: python python-3.x binary operating-system


【解决方案1】:

您的问题是您试图在需要字节的位置输入字符串。使用.encode()。以下对我有用,如果您有任何其他问题,请告诉我:

def create_key(x):
    import base64
    import os
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import hashes
    from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

    password_provided = str(x)
    password = password_provided.encode()
    salt = b'\xfb|\xe8\xe0\xe5\x9d\x11\xf5\xbc 8o\xbe<\xd9\x92'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    key = base64.urlsafe_b64encode(kdf.derive(password))
    f1 = open('keys.key', 'ab')
    f1.write(key)
    f1.write(os.linesep.encode())
    f1.close()


create_key('sairam')

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多