페넘 암호 - 바이너리 암호

8020 단어 Crypto
단계:
  • 명문은 키에 따라 숫자로 전환
  • 숫자와 명(밀)문에서 XOR 연산을 한다(여기는 내 이해이다. XOR 연산은 복호화 방법이 일치한다는 것을 의미한다)
  • 숫자가 그룹별로 밀문으로 전환
  • **key는 일반적으로 ascii 바이너리와 영문 대조표를 직접 사용합니다
    사촌 형이 쓴 코드를 보고 너무 부러워서 자기도 써보고 싶었어요. 자기 생각대로 한 시간 반 가까이 걸려서 만들었어요.
    자신의 코드를 붙이기
    
    # coding: utf-8
    ## Fenham 
    ## _Bonjour_Python3
    #
    Check_List_2num = {'A':'1000001','B':'1000010',
                       'C':'1000011','D':'1000100',
                       'E':'1000101','F':'1000110',
                       'G':'1000111','H':'1001000',
                       'I':'1001001','J':'1001010',
                       'K':'1001011','L':'1001100',
                       'M':'1001101','N':'1001110',
                       'O':'1001111','P':'1010000',
                       'Q':'1010001','R':'1010010',
                       'S':'1010011','T':'1010100',
                       'U':'1010101','V':'1010110',
                       'W':'1010111','X':'1011000',
                       'Y':'1011001','Z':'1011010'}
    
    ## key value  
    Check_List_2char = {value:key for key,value in     Check_List_2num.items()}
    
    ##   
    def change2num(text):
        finish = []
        for i in text:
            finish.append(Check_List_2num[i])
        return finish
    
    ##       
    def change2list(text):
        num = 0
        str = []
        while True:
            str.append(text[num:num+7])
            num += 7
            if(num > len(text) - 7):
                break
        return str
    
    ## XOR   
    def XOR(text,key):
        finish = ''
        for i in range(0,len(text)):
            if text[i] == key[i]:
                finish += '0'
            else:
                finish += '1'
        return finish
    
    ##    
    
    #      
    input = open('in.txt')
    try:
        text = input.read()
    finally:
        input.close()
    
    file = open('key.txt')
    try:
        key = file.read()
    finally:
        file.close()
    
    ##  key
    key = change2num(key)
    key = ''.join(key)
    
    ##   
    finish = XOR(text,key)
    
    ##     
    finish = change2list(finish)
    str = ''
    for i in finish:
        str += Check_List_2char[i]
    print(str)

    몇 가지 작은 지식을 배워서 총괄해 보았다.
  • 파이썬 읽기 및 쓰기 파일
  • 오픈을 사용하여 파일을 열면 파일 대상을 호출하는close () 방법을 반드시 기억해야 합니다.예를 들어try/finally 문장으로 파일을 닫을 수 있는지 확인할 수 있습니다.
      file_object = open('thefile.txt')
      try:
           all_the_text = file_object.read( )
      finally:
           file_object.close( )

    주:open 문장을try 블록에 넣을 수 없습니다. 파일을 열 때 이상이 발생하면 파일 대상 fileobject에서 close () 방법을 실행할 수 없습니다
    ** 바이너리 읽기
      input = open('data', 'rb')
  • 키value 대조
  • dict는value를 통해 키 dict를 찾을 수 있습니다. 키로만 키를 찾을 수 있습니다. (value가 중복되지 않는 전제에서) 하나는 전체 사전을 반복해서 새로운 dict를 만들 수 있습니다. (또는 원래의 것을 대체할 수 있습니다)
    구현 코드:
     Check_List_2char = {value:key for key,value in Check_List_2num.items()}
  • 문자열 그룹화 처리:
  •   def change2list(text):
          num = 0
          str = []
          while True:
              str.append(text[num:num+7])
              num += 7
              if(num > len(text) - 7): ##  “-7”
                  break
          return str

    좋은 웹페이지 즐겨찾기