【发布时间】:2021-05-09 20:00:46
【问题描述】:
所以我目前正在使用库:simple-crypt。
我已经设法将某个输入字符串转换成它的二进制字符串。
pw_data = input("Please type in your p!") # enter password
pw_data_confirmed = input("Please confirm!")
_platform = input("Please tell me the platform!") # belonging platform
if pw_data == pw_data_confirmed: # check confirmed pw
print("Received!")
salt_data = "AbCdEfkhl" # salt key
ciphertext = encrypt(salt_data, pw_data.encode("utf8")) # encrypt pw with salt key
二进制字符串 例如:b'sc\x00\x02X\xd8\x8ez\xbfB\x03s\xc5\x8bm\xecp\x19\x8d\xd6lqW\xf1\xc3\xa4y\x8f\x1aW)\x9bX\xfc\ x0e\xa4\xf2ngJj/]{\x80\x06-\x07\x8cQ\xeef\x0b\x02?\x86\x19\x98\x94eW\x08}\x1d8\xdb\xe57\xf7\x97\x81\xb6\ xc7\x08\n^\xc9\xc0'
这个二进制字符串将被存储在一个word文档中。
现在的问题是: 一旦我阅读了文档并获得了这个特定的二进制字符串,它就无法识别它 不再是二进制字符串。相反,它现在是字符串数据类型。
p_loc = input("Which platform do you need?")
doc_existing = docx.Document(r"xxx")
text = []
for i in doc_existing.paragraphs:
text.append(i.text)
for pos,i in enumerate(text):
if i == p_loc:
len_pos = len(text[pos+1])
p_code = text[pos+1][2:len_pos-1] # get the binary string which is of type ordinary string
print(p_code.encode("utf8")) # when I apply .encode , another \ is added so I have for my binary code two \\
salt_data = "AbCdEfkhl"
plain = decrypt(salt_data, p_code)
print(plain)
p_code 没有 .encode 语句(作为字符串,而不是字节串!): sc\x00\x02X\xd8\x8ez\xbfB\x03s\xc5\x8bm\xecp\x19\x8d\xd6lqW\xf1\xc3\xa4y\x8f\x1aW)\x9bX\xfc\x0e\xa4\xf2ngJj/]{\ x80\x06-\x07\x8cQ\xeef\x0b\x02?\x86\x19\x98\x94eW\x08}\x1d8\xdb\xe57\xf7\x97\x81\xb6\xc7\x08\n^\xc9\ xc0
当我现在打印出 p_code.encode("utf8") 时,我得到以下结果: b'sc\\x00\\x02X\\xd8\\x8ez\\xbfB\\x03s\\xc5\\x8bm\\xecp\\x19\\x8d\\xd6lqW\\xf1\\xc3\\xa4y\\ x8f\\x1aW)\\x9bX\\xfc\\x0e\\xa4\\xf2ngJj/]{\\x80\\x06-\\x07\\x8cQ\\xeef\\x0b\\x02?\\x86\ \x19\\x98\\x94eW\\x08}\\x1d8\\xdb\\xe57\\xf7\\x97\\x81\\xb6\\xc7\\x08\\n^\\xc9\\xc0'
所以问题是,如果您将第二个二进制字符串与原始二进制字符串进行比较,它会向其中添加第二个 \。因此,我无法解码此二进制字符串,因为它不会将其识别为原始二进制代码字符串。
所以我的问题是: 有没有一种随意的方法可以将已经是二进制样式的字符串简单地转换回二进制字符串,所以它是一样的? 或者有没有办法可以删除第二个 \ 以便我再次拥有原始二进制字符串?
我非常感谢任何帮助!
【问题讨论】:
-
"这个二进制字符串将被存储在一个 word 文档中。"目前尚不清楚您的意思是什么。您提供的示例“二进制字符串”(
b'sc\x00\x02...)不是字符串。它是一个字节对象。术语“二进制字符串”具有误导性。您如何将这些字节存储到文档中?你用的是python 2还是3? -
如果我解释不清楚,我很抱歉。首先我使用python3.8。我所做的是:我使用某个输入字符串,例如“Hellothisisme”并对其进行加密。我使用 simple-crypt,在应用 simple-crypt 之前,我使用 encode(utf8) 将字符串转换为二进制字符串。然后这个二进制字符串将被附加到一个带有 docx 的 word 文档中。问题是:一旦我将它存储在单词中,它现在是字符串类型。所以当我现在尝试访问这个字符串时,它是一个二进制字符串,它被转换成一个字符串,所以它不会被识别为一个字节串。
-
我测试了它: type(p_code) 并打印出来:
str -
我会避免使用术语“二进制字符串”,如果你有一个字符串,并且你用 utf-8 对其进行编码,结果是字节。您如何将这些字节存储到 word 文档/文件中?
-
mydoc = docx.Document() mydoc.add_heading("存储的数据") mydoc.add_paragraph("") mydoc.add_paragraph("") mydoc.add_paragraph(f"{_platform}") mydoc .add_paragraph(f"{ciphertext}") mydoc.save(r"xxx") 这就是我存储它的方式。密文=加密(salt_data,pw_data.encode(“utf8”))。密文的输出是我在文档中发布的二进制字符串,然后作为字符串。
标签: python string binary encode python-simple-crypt