파 이 썬 으로 파일 을 암호 화 하 는 방법
그러나 일상적인 학습 에 있어 우 리 는 이 또는 조작 을 통 해 간단 한 파일 암호 화 프로그램 을 실현 하여 자신의 프로 그래 밍 능력 을 강화 할 수 있다.
기초 지식
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_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 암호 화 파일 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.