簡體   English   中英

Python 3.4加密器和解密器不起作用

[英]Python 3.4 Encrypter and Decrypter not working

我正在編寫一個python程序來加密和解密自定義字符串。 這不會用於任何嚴重的事情,只是為了好玩。 加密器似乎可以正常工作,但是這里是加密器。 該程序將所有內容寫入文件。 如下面的代碼所示,如​​果密鑰(由用戶定義)將其置於127以上,則程序將循環ASCII字符。

我的問題是解密時會出現一些奇怪的字符。 使用229以上的密鑰時失敗。

加密:

temp_key = 9999
message = "Hello"
result = ""
for char in message:
    ecry_char_int = ord(char) - temp_key
    while ecry_char_int < 0:
                temp_key -= 128
                ecry_char_int = 128 - temp_key
    result += chr(ecry_char_int)
print(result)

解密:

result2 = ""
encoded = result
ekey = 9999
for char in encoded:
    decr_char_int = ord(char) + ekey
    while decr_char_int > 127:
         ekey -= 128
         decr_char_int = ekey
    result2 += chr(decr_char_int)
print(result2)

例如,使用密鑰9999加密"Hello" 我得到了"qV]]`"的加密字符串。 用密鑰9999解密字符串"qV]]`" ,我得到了:

'\x0fello'

我想弄清楚的是我應該如何阻止這種情況的發生,因為這只是發生這種情況的第一個角色。

注意:我不希望/不知道如何安裝任何其他模塊(即密碼學),因為它/主要是在我的學校計算機上開發的。

那是因為您並沒有真正加密任何內容-在第一個字符之后,您的算法會變成簡單的Caesar密碼,在此情況下, temp_key > ord(first_char)所有條件,第一個字符將始終被“加密”為128 - temp_key % 128的值temp_key > ord(first_char)

問題在於,在初始ecry_char_int = ord(char) - temp_key ,如果碰巧小於鍵,您就不會考慮當前字符(這就是ord('H')72時的情況)您的密鑰是9999 )-您進入循環,您依次從temp_key減去128,並將128 - temp_key設置為ecry_char_int 最終,當從128中減去temp_key時, temp_key會足夠小以產生一個正數,此時您將把該數設置為“加密”字符。 因此,實際上,您采用了長循環的方式將第一個字符設置為128 - temp_key % 128 (即113 ,順便說一句。這就是為什么對於幾乎所有鍵來說,函數中的第一個字符始終為q的原因>256 )。

但這還不是全部-由於您現在已將temp_key的值修改為原始的temp_key % 128 (因此9999鍵為15 ),現在所有后續字符都將向左移ascii那個量,導致e變為Vchr(ord("e") - 15) )等。因此-您已經擁有一個凱撒密碼

您的解密功能在相反方向上的作用幾乎相同,第一個字符將始終以相同的方式構造,其余字符將按相同位置右移ascii到其原始位置。

幫自己一個忙,如果需要加密,請使用適當的加密。 這是一個簡單的例子

暫無
暫無

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

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