簡體   English   中英

當我不希望它返回十六進制字符時,如何解決(或使用)這個函數? (Python 3)

[英]How can I work around (or with) this function returning hexadecimal characters when I don't want it to? (Python 3)

我編寫了一個加密函數,它通過對明文中的字母和密鑰中的相應字母執行 XOR 函數來工作。 請看下面的代碼:

def vernam(y):
    ciphertext = ""  # this declares the ciphertext variable
    vernamkey = []
    for letter in y:
        individualletterkey = secrets.choice(string.ascii_letters)  # this generates a different key for each letter
        vernamkey.append(individualletterkey)
        newletter = chr(ord(letter) ^ ord(individualletterkey))
        print(newletter)
        ciphertext += newletter
    for element in vernamkey:  # this loop ensures that the key for every letter is in a text file that can be passed
        # on to the intended recipient for them to decrypt
        vkey.write(str(element))
        vkey.write("\n")
    return ciphertext

雖然 encrypt 函數有效,但對於 pycharm(我的 IDE)似乎無法表示的某些 unicode 字符,返回的密文中包含十六進制:

Enter the message to be encrypted Hello world


8
?
;
l

 
=

6
('\x01\x178?;l\x07\x00=\x0e6')

如您所見,對於密文中的某些字符,我假設使用了一種占位符。 然后這些字符在底部的最終輸出密鑰中表示為十六進制。 這是一個問題,因為我希望使用此密鑰來解密此文本,並且要做到這一點,必須發生以下兩件事之一:

  1. 將十六進制轉換為最終密鑰中的 unicode 字符。 不確定這是否明智,因為多個不同的字符將由相同的答案表示

  2. 讓解密算法識別文本中的十六進制字符並自行將其轉換為 unicode

我將如何完成其​​中任何一項?

您描述的問題的核心是您對 Python 中的變量類型以及用於存儲在文件中的文本/字符串編碼的混淆。

Python 字符串包含 Unicode 字符,字節字符串包含范圍 (0,255) 內的 ASCII 代碼/整數,依此類推。 讓我們從評論中鏈接到您的問題的演示文稿中放一些 Unicode 樂趣,我鼓勵您閱讀:

ℛℯα∂α♭ℓℯ ♭ʊ☂ η☺т Ѧ$☾ℐℐ ¡ooʇ ןnɟǝsn sı uʍop-ǝpısdn

一旦你清楚你想要達到什么目標,困惑就會消失,你可以提出正確的問題。 我建議你考慮研究一下如何在 Unicode 和字節之間進行轉換,以及 UTF-8、UTF-16 等是什么。

你所看到的並不是你所擁有的。

這個事實通常是為什么這個問題在這么多人中造成如此嚴重的困惑的原因。 例如,如果您在文本編輯器中看到下一行,您通常看不到換行符是由兩個字符組成(如果您使用 MS Windows,則為默認值)或只有一個字符(在 Unix/Linux 系統中為默認值) . 與在文件中編碼和存儲文本以及在文本編輯器中查看文本相關的問題並非易事,需要深入了解。

很抱歉,沒有辦法學習如何指定和使用編碼來寫入和讀取文件(除非您總是希望依賴外部幫助)。

如果沒有加密代碼和解密代碼,以及寫入文件和讀取文件的代碼,就很難判斷事情是否會按預期進行。

困惑已經從一個問題開始:如何讀取存儲在文件中的文本並將其解碼為 Python 變量? 有字節嗎? 文件中是否存儲了 Unicode UTF-8 或 UTF-16 字符? 還是使用了代碼頁?? 使用哪種編碼寫入文件? 使用哪種編碼從文件中讀取?

您似乎沒有意識到上述所有這些問題。 但是,如果出現問題,您應該了解如何解決它們。

開始學習編碼的一個好點是訪問這個stackoverflow 問題如何知道 Python 中文件的編碼?[重復] )我使用搜索引擎和關鍵字發現:'python 文件編碼'這個:什么是字符編碼,我為什么要打擾它

我已經在stackoverflow上寫了關於編碼的主題(在stackoverflow自己的搜索中使用'user:7711283 encoding'來搜索8個結果的完整列表)。 這里如果您在 Python(或文件)中有一個字符串/文本,您將永遠無法“按原樣”看到它)。 您越了解為什么您永遠無法“按原樣”看到字符串,您就越不會對所看到的內容感到困惑。 也看這里沒有辦法避免編碼/解碼,但有一種方法可以以不明確的方式進行。)

下一步是找出在保存或加載 Python 腳本或文本時使用文本編輯器的文件編碼,以幫助您解釋您在編輯器中實際看到的內容。 以下提示在何處查找此信息: 文本文件編輯器菜單文件中的編碼

暫無
暫無

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

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