2011-03-15 2 views
0

룰 파일을 열고 내 암호화에 사용할 사전을 만들 수 있습니다. 또한 텍스트 해독에 사용할 사전을 만들어야합니다. 기본적으로 사소한 변경 사항이있는 동일한 기능이라고 가정합니다. 암호화가 잘 작동하지만 해독을 작동시키지 못합니다. 두 번째 문제는 파일을 암호화하는 동안 모든 공백과 구두점을 제거했기 때문입니다. 일단 프로그램을 실행하면 출력 파일에서 그 파일을 다시 가져 오는 방법을 알 수 없습니다. 단지 하나의 열에 인쇄됩니다. 마지막으로 이것을 .txt 파일로 출력해야합니다. 사용자가 할당 한 이름으로 .txt를 만들 수 있지만 파일에 아무 것도 인쇄 할 수 없습니다.파이썬에서 대체 암호를 사용하여 .txt 파일을 암호화 및 암호 해독하고 새로운 .txt 파일로 출력

여기까지 내가 지금까지 달성 한 바가 있습니다.

#import clauses 
import string 


#function definitions 



#encrypt dictionary 
def createrulesdictencrypt(openFile): 
    rulesencrypt1 = {} 
    for line in openFile: 
     rulessplit = string.split(string.strip(line)) 
     rulesencrypt1[rulessplit[0]] = rulessplit[1] 
    return rulesencrypt1 

#decrypt dictionary 
def createrulesdictdecrypt(openFile): 
    rulesdecrypt1 = {} 
    for line in openFile: 
     rulessplit = string.split(string.strip(line)) 
     rulesdecrypt1[rulessplit[1]] = rulessplit[0] 
    return rulesdecrypt1 

openFile = open('rules.txt', 'r') 
rulesencrypt = createrulesdictencrypt(openFile) 
rulesdecrypt = createrulesdictdecrypt(openFile) 
#print rulesencrypt 
#print rulesdecrypt 




#function for encrypting file 
def encryptfile(openFile2): 
    for line in openFile2: 
     for word in line.split(): 
      empty = '' 
      for char in word: 
       if char not in string.punctuation: 
        char=char.lower() 
        empty = empty+char 
       if len(empty) == 2: 
        print rulesencrypt[empty] 
        empty = '' 
      if len(empty) == 1: 
       print rulesencrypt[empty] 



#function for decrypting file 
def decryptfile(openFile2): 
    for line in openFile2: 
     for word in line.split(): 
      empty = '' 
      for char in word: 
       if char not in string.punctuation: 
        char=char.lower() 
        empty = empty+char 
       if len(empty) == 2: 
        print rulesdecrypt[empty] 
        empty = '' 
      if len(empty) == 1: 
       print rulesdecrypt[empty] 


#main program 

ende = raw_input("To encrypt a file, enter '0':\nTo decrypt a file, enter '1':") 
filename = raw_input("Enter the name of the file to be processed:") 
outfilename = raw_input("Enter the name of the file to save the result to:") 
openFile2 = open(filename, 'r') 
outputfile = open(outfilename, 'w') 
fileencrypt = encryptfile(openFile2) 
filedecrypt = decryptfile(openFile2) 


if ende == "0": 
    print encryptfile(fileencrypt) 
if ende == "1": 
    print decryptfile(filedecrypt) 

내가

선생님 로빈를 암호화하기 위해 노력하고 있습니다 것입니다 : "오, 거짓말 쟁이"

민스트 렐 : [용감하게] 발끝까지 용감히 맞 섰다. 그는 용감한 선생 인 로빈의 용감한 피정인 퇴각했다.

+0

암호화 기술은 정보를 다른 방식으로 표시하는 것이며 해독은 원래 방식으로 정보를 검색하는 것입니다. 그래서 어떤 시점에서 원래의 방식으로 다시 복구 할 수없는 정보를 잃어 버리면 제 제안은 구두점과 공백과 같은 모든 정보를 먼저 보존하는 것입니다 ... –

답변

0

첫 번째 문제는 실제로 암호화 된 텍스트를 파일에 쓰지 않고 단지 sys.stdout으로 인쇄한다는 것입니다. 덧붙여 말하자면, print은 기본적으로 \ n을 출력에 추가합니다. 다음과 같이

당신은 당신의 해독 기능을 다시 쓸 수있다 : 당신은 다음 두 번째 인수로 파일로 DecryptFile을 함수를 호출해야합니다

#function for decrypting file 
def decryptfile(openFile2, outfile): # <- CHANGED to add outfile 
    for line in openFile2: 
     for word in line.split(): 
      empty = '' 
      for char in word: 
       if char not in string.punctuation: 
        char=char.lower() 
        empty = empty+char 
       if len(empty) == 2: 
        outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file 
        empty = '' 
      if len(empty) == 1: 
       outfile.write(rulesdecrypt[empty]) # <- CHANGED to write to file 

. encryptfile 함수에도 비슷한 변화가있을 수 있습니다.

구두점 및 공백과 관련하여 암호화하거나 그대로 두십시오. 제거한 후에는 대체 할 수있는 좋은 방법이 아닙니다.

+0

안녕하세요. 도움에 감사드립니다. 여전히 파일에 아무 것도 인쇄하지 않습니다. 사용자가 일단 암호화 또는 암호 해독을 원했던 파일의 이름을 입력하면 쉘에서 인쇄하고 새 텍스트 파일을 작성해야하기 때문에 인쇄를 한 이유입니다. 나는 여전히 한 열 대신에 줄을 써서 출력하는 방법을 알아낼 수 없었다. 제가해야 할 일을 제게 설명해 주시겠습니까? – SimplyZ

+0

print를 사용하지 말고 대신 sys.stdout.write()를 사용하여 입력 한 내용 만 출력합니다. 파일로 출력하려면 파일의 write 메소드를 호출해야합니다. 파일과 콘솔 모두에 인쇄하려면 양쪽 모두에 쓸 수도 있고 티를 사용할 수도 있습니다. 좋은 토론은 http://www.shallowsky.com/blog/programming/python-tee.html입니다. –

관련 문제