파 이 썬 으로 파일 을 암호 화 하 는 방법

4781 단어 python암호 화
생활 속 에서 가끔 우 리 는 중요 한 파일 을 암호 화 해 야 한다.Python 은 hashlib,base 64 등 사용 하기 쉬 운 암호 화 라 이브 러 리 를 제공 했다.
그러나 일상적인 학습 에 있어 우 리 는 이 또는 조작 을 통 해 간단 한 파일 암호 화 프로그램 을 실현 하여 자신의 프로 그래 밍 능력 을 강화 할 수 있다.
기초 지식
Python 에서 이 또는 조작 부 호 는:^이 고 XOR 로 기록 할 수 있 습 니 다.비트 에 따라 다 르 거나 같은 값 이 다 르 거나 0 이 며,다른 값 이 다 르 거나 1 이라는 뜻 이다.구체 적 으로 말 하면 네 가지 가능성 이 있다.0^0=0,0^1=1,1^0=1,1^1=0.우 리 는 또한 규칙(A 는 0 또는 1)을 정리 할 수 있다.0 과 A 의 차이 또는 A 자체 이다.1 과 A 는 다르다.
이 진수 가 만족 하 는 성질 을 보고 싶 습 니 다.
  • 한 바 이 너 리 수 와 자신의 차이 또는 값 은 0 이다.
  • b ^ b = 0
  • 이 또는 조작 만족 교환 율
  • a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
  • 0 과 a 의 차이 또는 a
  • (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a
    임의의 장 이 진수 에 대해 상술 한 성질 을 만족 시 키 는 것 을 쉽게 알 수 있다.
    의 원리
    이 또는 조작의 성질 을 이해 함으로써 암호 화 원 리 는 매우 뚜렷 해 졌 다.
    암호 화 작업:
    먼저 파일 을 바 이 너 리 로 변환 한 다음 이 바 이 너 리 수 와 같은 무 작위 키 를 생 성하 고 바 이 너 리 수 와 키 를 이동 하거나 조작 하여 암호 화 된 바 이 너 리 수 를 얻 습 니 다.
    복호화 작업:
    암호 화 된 바 이 너 리 프로그램 과 키 를 이동 하거나 조작 하면 원본 바 이 너 리 를 얻 고 마지막 으로 원본 바 이 너 리 를 텍스트 파일 로 복원 합 니 다.
    무 작위 키 생 성:
    secrets 라 이브 러 리 는 Python 3.6 에 도 입 된 위조 난수 모듈 로 무 작위 키 를 만 들 기 에 적합 합 니 다.token_bytes 함 수 는 int 인 자 를 받 아들 여 무 작위 바이트 문자열 의 길 이 를 지정 합 니 다.int.from_bytes 는 바이트 문자열 을 int,즉 우리 가 필요 로 하 는 바 이 너 리 로 변환 합 니 다.
    
    from secrets import token_bytes
    
    def random_key(length):
      key = token_bytes(nbytes=length)
      key_int = int.from_bytes(key, 'big')
      return key_int
    암호 화 단위:
    encrypt 함 수 는 str 대상 을 받 아들 여 원 그룹(int,int)으로 돌아 갑 니 다.encode 방법 을 통 해 문자열 을 바이트 문자열 로 인 코딩 합 니 다.int.from_bytes 함 수 는 바이트 문자열 을 int 대상 으로 변환 합 니 다.마지막 으로 바 이 너 리 대상 과 무 작위 키 를 이동 하거나 조작 하면 암호 화 된 텍스트 를 얻 을 수 있 습 니 다.
    
    def encrypt(raw):
      raw_bytes = raw.encode()
      raw_int = int.from_bytes(raw_bytes, 'big')
      key_int = random_key(len(raw_bytes))
      return raw_int ^ key_int, key_int
    복호화 단위:
    decrypt 은 암호 화 된 텍스트 와 무 작위 키 로 두 개의 int 대상 을 받 아들 입 니 다.먼저 이들 에 대해 이 또는 조작 을 하고 복호화 된 int 대상 이 차지 하 는 비트 수 를 계산한다.decrypted.bit_length 함 수 는 이 진수 의 자릿수 를 얻 었 고 8 을 나 누 면 비트 크기 를 얻 을 수 있 습 니 다.1~7 자리 의 이 진수 정 제 는 8 에서 0 을 얻 는 것 을 방지 하기 위해 7 을 더 한 다음 8 을 정 제 를 해 야 한다.int.to 사용bytes 함 수 는 복호화 후의 int 대상 을 bytes 대상 으로 변환 합 니 다.마지막 으로 decode 방법 을 통 해 바이트 문자열 을 문자열 로 변환 합 니 다.
    
    def decrypt(encrypted, key_int):
      decrypted = encrypted ^ key_int
      length = (decrypted.bit_length() + 7) // 8
      decrypted_bytes = int.to_bytes(decrypted, length, 'big') 
      return decrypted_bytes.decode()
    상기 함 수 를 이용 하여 우 리 는 텍스트 파일 을 쉽게 암호 화하 고 복호화 할 수 있 습 니 다.
    
    >>> raw = '       ,      '
    >>> encrypted = encrypt(raw)
    >>> encrypted
    (217447100157746604585...,
     9697901906831571319...)
    >>> decrypt(*encrypted)
    '       ,      '
    암호 화 된 텍스트 파일
    path 는 암호 화 된 파일 의 주소 입 니 다.키 주 소 를 지정 하지 않 으 면 이 디 렉 터 리 에 새 디 렉 터 리 와 파일 을 만 듭 니 다.
    
    import json
    from pathlib import Path
    
    def encrypt_file(path, key_path=None, *, encoding='utf-8'):
      path = Path(path)
      cwd = path.cwd() / path.name.split('.')[0]
      path_encrypted = cwd / path.name 
      if key_path is None:
        key_path = cwd / 'key'
      if not cwd.exists():
        cwd.mkdir()
        path_encrypted.touch()
        key_path.touch()
    
      with path.open('rt', encoding=encoding) as f1, \
        path_encrypted.open('wt', encoding=encoding) as f2, \
          key_path.open('wt', encoding=encoding) as f3:
        encrypted, key = encrypt(f1.read())
        json.dump(encrypted, f2)
        json.dump(key, f3)
    파일 복호화
    
    def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
      path_encrypted = Path(path_encrypted)
      cwd = path_encrypted.cwd()
      path_decrypted = cwd / 'decrypted' 
      if not path_decrypted.exists():
        path_decrypted.mkdir()
        path_decrypted /= path_encrypted.name
        path_decrypted.touch()
      if key_path is None:
        key_path = cwd / 'key'
      with path_encrypted.open('rt', encoding=encoding) as f1, \
        key_path.open('rt', encoding=encoding) as f2, \
        path_decrypted.open('wt', encoding=encoding) as f3:
        decrypted = decrypt(json.load(f1), json.load(f2))
        f3.write(decrypted)
    암호 화,복호화 파일 작업 을 마치 고 얻 은 복호화 파일 은 원래 파일 과 같 습 니 다.설명도 는 다음 과 같 습 니 다.

    이상 은 Python 으로 파일 을 암호 화 하 는 방법 에 대한 상세 한 내용 입 니 다.Python 암호 화 파일 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기