파 이 썬 으로 파일 을 암호 화 하 는 방법
그러나 일상적인 학습 에 있어 우 리 는 이 또는 조작 을 통 해 간단 한 파일 암호 화 프로그램 을 실현 하여 자신의 프로 그래 밍 능력 을 강화 할 수 있다.
기초 지식
Python 에서 이 또는 조작 부 호 는:
^이 고 XOR 로 기록 할 수 있 습 니 다.비트 에 따라 다 르 거나 같은 값 이 다 르 거나 0 이 며,다른 값 이 다 르 거나 1 이라는 뜻 이다.구체 적 으로 말 하면 네 가지 가능성 이 있다.0^0=0,0^1=1,1^0=1,1^1=0.우 리 는 또한 규칙(A 는 0 또는 1)을 정리 할 수 있다.0 과 A 의 차이 또는 A 자체 이다.1 과 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_intencrypt 함 수 는 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_intdecrypt 은 암호 화 된 텍스트 와 무 작위 키 로 두 개의 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 암호 화 파일 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.