인코딩 부분에서 살펴본 것처럼 암호화는 큰 정수, 원시 바이트, 16진수 문자열 등 매우 다양한 형식으로 데이터를 처리합니다. 암호화 데이터의 송수신을 지원하기 위해 몇 가지 구조화된 형식이 표준화되었습니다. 이러한 공통 데이터 형식을 인식하고 조작할 수 있습니다.
PEM은 키, 인증서 및 기타 암호화 자료를 보내는 데 널리 사용되는 형식입니다. 모양은 다음과 같습니다
base64 인코딩된 데이터를 한 줄의 머리글과 바닥글로 감싸 데이터 구문 분석 방법을 나타냅니다. 헤더와 본문에 정확한 하이픈 수가 있어야 합니다. 그렇지 않으면 암호화 도구가 파일을 인식할 수 없습니다.
base64 인코딩된 데이터는 DER 인코딩된 ASN.1 값입니다. 혼란스럽습니까? 아래 링크된 리소스에는 이러한 두문자어가 무엇을 의미하는지에 대한 자세한 정보가 있지만, 역사적인 이유로 복잡성이 존재하며 세부 사항을 너무 깊이 파고들 경우 화날 수 있습니다.
pem형식의 RSA키에서 10진수인 정수로 개인 키의 d값을 추출하십시오.
여기 이 문제를 풀기 위한 두 가지 방법이 있습니다. 인증서의 데이터는 openssl 명령줄 도구를 사용하여 읽거나 PyCryptodome(import Crypto)를 사용하여 Python에서 읽을 수 있습니다. PyCryptodome(Crypto)을 사용하는 것이 좋습니다. 먼저 Crypto에서 RSA 모듈을 가져옵니다.PublicKey가 RSA를 가져오면 RSA.importKey()를 사용하여 키 데이터를 읽을 수 있습니다.
뒤에 '.d', '.n', '.e'을 붙여 사용하게 되면 RSA에 사용된 구성요소를 볼 수 있게 된다.
그래서 문제에서의 d값을 위해 '.d'를 사용하여 d의 값을 확인하였다.
from Crypto.PublicKey import RSA
with open('privacy_enhanced_mail_1f696c053d76a78c2c531bb013a92d4a.pem','r') as key_file:
key = RSA.importKey(key_file.read()).d
print(key)