>  기사  >  백엔드 개발  >  Python의 Base64 암호화 및 복호화 작업 방법과 버전 간 차이점

Python의 Base64 암호화 및 복호화 작업 방법과 버전 간 차이점

巴扎黑
巴扎黑원래의
2017-08-16 13:45:391779검색

오늘은 base64 암호화 기능의 사용법과 Python2와 Python3의 차이점을 살펴보겠습니다.

1. base64

Base64는 인쇄 가능한 64개의 문자를 기반으로 하는 이진 데이터의 표현 방법입니다. 2의 6승은 64이므로 6비트마다 인쇄 가능한 문자에 해당하는 단위입니다. 3바이트는 4개의 Base64 단위에 해당하는 24비트를 갖습니다. 즉, 3바이트는 4개의 인쇄 가능한 문자로 표현되어야 합니다. 이메일 전송 인코딩으로 사용할 수 있습니다. Base64에서 인쇄 가능한 문자에는 문자 A-Z, a-z 및 숫자 0-9가 포함되므로 총 62개의 문자가 있습니다. 인쇄 가능한 다른 두 기호는 시스템에 따라 다릅니다. 인코딩된 데이터는 원본 데이터보다 약간 길어서 원본의 4/3 정도입니다.

Base64는 일반적으로 텍스트 데이터를 처리하는 상황에서 일부 바이너리 데이터(또는 인쇄할 수 없는 문자열)를 표현, 전송 및 저장하는 데 자주 사용됩니다. MIME 이메일 포함, MIME을 통한 이메일, 복잡한 데이터를 XML로 저장

이메일에 사용:

MIME 형식 이메일에서 base64를 사용하여 이진 바이트 시퀀스 데이터를 ASCII 문자 시퀀스 구성된 텍스트로 인코딩할 수 있습니다. 사용하는 경우 전송 인코딩 방법에 base64를 지정하세요. 사용되는 문자는 대문자 26자, 소문자 10자, 숫자 10자, 더하기 기호 "+", 슬래시 "/" 총 64자이며, 접미사로 등호 "="를 사용합니다.

URL에서 사용:

표준 Base64는 URL에서 직접 전송하는 데 적합하지 않습니다. 왜냐하면 URL 인코더는 표준 Base64의 "/" 및 "+" 문자를 "%XX" 형식과 같은 형식으로 변경하기 때문입니다. %" 기호는 ANSI SQL에서 와일드카드 문자로 사용되었기 때문에 데이터베이스에 저장할 때 변환해야 합니다.

이 문제를 해결하려면 끝에 '=' 기호를 채우지 않고 표준 Base64의 "+" 및 "/"를 각각 "*" 및 "로 변경하는 향상된 URL용 Base64 인코딩을 사용할 수 있습니다. -", 이는 URL 인코딩, 디코딩 및 데이터베이스 저장 중에 변환이 필요하지 않으며, 프로세스에서 인코딩된 정보의 길이가 증가하는 것을 방지하고, 데이터베이스, 양식 등의 개체 식별자 형식을 통합합니다.

정규식에서 "+"와 "*"는 특별한 의미를 갖기 때문에 "+"와 "/"를 "!"와 "-"로 변경하는 향상된 Base64 변형도 있습니다.

2. Python에서의 사용

Python2와 Python3은 base64 처리에서 다릅니다. Python3에서 전달된 매개변수는 유니코드 문자열일 수 없으며 변환해야 합니다.

Python2:

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> base64.b64encode(str)
'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode('cHl0aG9udGFiLmNvbQ==')
'pythontab.com'
>>>

Python3:

Python 3.5.2 (default, Aug 24 2016, 16:48:29) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> bytesStr = str.encode(encoding='utf-8')
>>> bytesStr.decode()
'pythontab.com'
>>> b64str = base64.b64encode(bytesStr)
>>> b64str
b'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode(b64str)
b'pythontab.com'
>>>

참고:

먼저 Python에서 문자열의 내부 표현은 유니코드 인코딩이라는 점을 이해해야 합니다.

따라서 인코딩 변환을 수행할 때 일반적으로 중간 인코딩으로 유니코드를 사용해야 합니다. 다른 인코딩을 유니코드로 인코딩(디코드)한 다음 유니코드에서 다른 인코딩으로 인코딩(인코딩)합니다.

디코드 기능은 다른 인코딩된 문자열을 유니코드 인코딩으로 변환하는 것입니다.

예를 들어 str1.decode('gb2312')는 gb2312 인코딩 문자열을 유니코드 인코딩으로 변환하는 것을 의미합니다.

인코드 기능은 유니코드 인코딩을 다른 인코딩된 문자열(

예: str2.encode('gb2312'))으로 변환하는 것입니다. 이는 유니코드 인코딩 문자열을 gb2312 인코딩으로 변환하는 것을 의미합니다.

3. 기타 방법

base64.b64encode(s[, altchars])

base64.b64decode(s[, altchars])

altchars는 + 및 / 중 하나 또는 두 개를 대체하는 데 사용되는 선택적 매개변수입니다. 문자열의.

base64.urlsafe_b64encode(s)

base64.urlsafe_b64decode(s)

이 방법에서는 + 대신 -를 사용하고 / 대신 _를 사용합니다. 이렇게 하면 인코딩된 문자열에 배치할 때 정상적으로 액세스할 수 있습니다. URL

base64.b32encode(s)

base64.b32decode(s[, casefold[, map01]])

base64.b16encode(s)

base64.b16decode(s[, casefold])

위 내용은 Python의 Base64 암호화 및 복호화 작업 방법과 버전 간 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.