-
[Python] cryptography 라이브러리로 RSA에 쓰일 .pem file 로드하기Python 2023. 10. 24. 23:43728x90반응형
이번에는 내가 .pem 파일을 통해 encryption과 decryption을 진행해야하는데
내가 로드한 코드가 맞는 코드인지좀 체크해야돼서 이렇게 작성을 진행한다.
그리고 보통 다른 포스팅은 Pycrypto 혹은 Pycryptodome인가? 그 라이브러리로 많이 진행을 하던데
나는 cryptography라는 라이브러리로 하는게 필요했다고 생각해서 이걸로 적어보려한다.
설치는
pip3 install cryptography
를 진행하면된다.
-----BEGIN CERTIFICATE----- MIIDWjCCAkICFA5LS3zQkHbZX6fry6Rzd3Bkt12uMA0GCSqGSIb3DQEBCwUAMHEx CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTERMA8GA1UEBwwIQmVya2VsZXkxDTAL BgNVBAoMBEVFQ1MxHTAbBgNVBAsMFENlcnRpZmljYXRlQXV0aG9yaXR5MRQwEgYD VQQDDAtpb3RhdXRoLm9yZzAeFw0yMzEwMjMwOTM2MTRaFw0yNTEwMjIwOTM2MTRa다음으로 나의 .pem 파일 중 public key를 담은 내용의 시작은
-----BEGIN CERTIFICATE----- 일 경우이다.
이는 PKI 인증서로 불리는데 이것을 로드할때는 기존의 public key를 로드할때처럼 코드를 진행하면 안된다.
왜냐하면 cryptography에서 제공할 때, 저 문구의 시작이면 이는 x509로 로드를 진행해야하기 때문이다.
https://cryptography.io/en/latest/x509/reference/#cryptography.x509.load_pem_x509_certificate
X.509 Reference — Cryptography 42.0.0.dev1 documentation
CRL Entry Extensions These extensions are only valid within a RevokedCertificate object. class cryptography.x509.CertificateIssuer(general_names)[source] The certificate issuer is an extension that is only valid inside RevokedCertificate objects. If the in
cryptography.io
자세한 사항은 이 페이지를 참고하길바람.
불러오는 코드와 public key로 변경하는 코드는 다음과같다.
from cryptography import x509 from cryptography.hazmat.backends import default_backend with open(pubkey_path, 'rb') as content: public_key = (x509.load_pem_x509_certificate(content.read(), default_backend)).public_key()다음으로 진행하면 올바르게 public key를 불러오는것으로 생각할 수 있다.
(이는 내가 실험까지 진행했기에 맞다고 확신한다는....ㅎㅎ)
다음으로는 private key를 로드하는 코드인데 .pem 파일은 다음과같다.
-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDLcq/flKYwjXsf 7ixQjiAVw/9yTghmT2rmrxyjzAavZS49eOWByx+aGmH0OYqISzS+YPJMGUk9wc2s jetYjql4T5SSabq9YJ1j3avPGwfXAOiTpw3lkCEyXZ1TE6iMplV5OX2H0gf4tesh OxNOajo5KgyvZAcHLF7E++9lNw8tHyylXWDBPI6piARiVzlOrVkcEIXmwS25eoQK ZeAFDZ05hTfvMFAhAEzt/xeHniKZsbO6Qfdb/nk8FqBO24oEeb6eq8Rgw478JCC4 /BCzTaGBciX9D7/cj3T+0XI5xLxAK0AhWQnUpNJJllm1u72MCa/a/HhlVW96eeOE 2rpRQWHFAgMBAAECggEAFKn27BYclSThoxodXSc6YguQyArd9opNeNXDam2gJjN4 MV00rmyzroLMfTJU/EfrOQT+xzTwR/oFymd1xn5i/ynSFNbxVSfZhJmwyC3eK3vX o5udoTn07Tkt8BC4l2STnOb2dZOjJKNRmQP3j4jhlgnL1QqrXhKnI4nVRGoFvBbW aVH2MxLwoOyxG1cCWPdGzVDMjJjKXTgcWPRIVATE KEY로 되어있으면 그래도 손쉽게 로드할 수 있다.
물론 이는 RSA기준이므로 그에 해당하는 사람이 일단 쓰길 권장.
그리고 다 코드를 뜯어볼수는있는데 꽤나 힘들긴하다... 실제로 잘되는지 어떤 arg가 필요한지 파악하느라 꽤나 애먹었다.
from cryptography.hazmat.primitives import serialization with open(privkey_path, 'rb') as content: private_key= serialization.load_pem_private_key(content.read(), None)이렇게 진행하면 private key를 얻을 수 있다.
증명 방법은 encryption과 decryption이 있는데 이는 다음장에서 다시 올리는걸루!!
이번 포스팅은 이만 안녕!
728x90반응형'Python' 카테고리의 다른 글
[Python] HMAC SHA256 sign 및 verify (0) 2023.10.28 [Python] AES CBC모드 암호화 및 복호화 (0) 2023.10.28 [Python] cryptography 라이브러리로 RSA encrypt와 sign하기 (0) 2023.10.25 [Python] Pycrypto 'RSA.py' error (0) 2023.10.24 DB 파일 생성(python) (0) 2023.07.04