私はアクティブ状態のpythonレシピの1つを調べていて、次のコードを見つけました。私は次の4つの質問を思いついた。どんな指導や説明にも非常に感謝しています。ファイルの暗号化と復号化のためのPythonスクリプト
Q :: Imは、「k = long(sys.argv [2])」の最初の場所にあるユーザーから「キーランダムシード」が取り出された理由を正確に理解できませんか?特に、この値 'k'はコードの後半部分で使用されていないようですか?
第2に、暗号化と復号化のコードの部分では、 "bytearray [i] -random.randint(0,255)%256"というステートメントの正確な意味は何ですか?これは、各文字のユニコード値が暗号化中にシフトまたは置換され、復号化されたときに元の値に戻されることを意味しますか?
第3に、「bytearray = map(ord、f1.read())」は、ファイル内のすべての文字のユニコードポイント値を計算しますか?
最後に、暗号化と復号化に乱数が使用されるため、暗号化されたファイルの復号化が正確であることを保証する要因は何ですか?種の値 "k"はこれと何か関係がありますか?
以下は私が勉強しているコードです。
が大幅ご指導に感謝します、事前に感謝
# encdec.py
import sys
import random
if len(sys.argv) != 5:
print "Usage: encdec.py e/d longintkey [path]filename1 [path]filename2"
sys.exit()
k = long(sys.argv[2]) # key
random.seed(k)
f1 = open(sys.argv[3], "rb")
bytearr = map (ord, f1.read())
f2 = open(sys.argv[4], "wb")
if sys.argv[1] == "e": # encryption
for i in range(len(bytearr)):
byt = (bytearr[i] + random.randint(0, 255)) % 256
f2.write(chr(byt))
if sys.argv[1] == "d": # decryption
for i in range(len(bytearr)):
byt = ((bytearr[i] - random.randint(0, 255)) + 256) % 256
f2.write(chr(byt))
f1.close()
f2.close()
+1の速度!私が加えたいのは、ユニコードはそれと関係がないということです。ファイルはバイナリモードで開き、そのように処理されます。 – DSM
ありがとう!それは私の疑問のほとんどを解決する。私はまだ、「bytearr = map(ord、f1.read())」が実際に何をしているのかはっきりしていませんか? – Nura
ありがとう@DSM!ピコを使って暗号化されたファイルを開くと、ちょっと変わったことがあります。彼らはちょうどいくつかのランダムなアルファベットと数字であってはなりませんか? – Nura