applan의 개발 이야기

[ Python ] RSA String타입의 PrivateKey을 이용한 복호화 본문

카테고리 없음

[ Python ] RSA String타입의 PrivateKey을 이용한 복호화

applan 2021. 5. 21. 16:16
728x90

Java 에서 DB에 등록한 String타입의 PrivateKey를 가지고 

Python에서 해당 PrivateKey값을 이용하여 비밀번호를 복호화 해야 하는 일이 생겼다.

 

다양한 방법을 사용해봤지만 에러 발생 후 최종적으로 해결되었다.

 

실패했던 소스 ( 더 있지만 생략 )

# DB에서 가지고온 privateKey와 Password 값
key = v['privateKey']
pw = v['password']

# python에서 String타입의 privateKey값을 맞게 변환하기 위해서는 해당 문자열 형식 필요
pem_prefix = '-----BEGIN RSA PRIVATE KEY-----\n'
pem_suffix = '\n-----END RSA PRIVATE KEY-----'
key = '{}{}{}'.format(pem_prefix, key, pem_suffix)

prk = rsa.PrivateKey.load_pkcs1(key)
cipher = Cipher_PKCS1_v1_5.new(prk)
cipher_text = cipher.decrypt(pw, None)

# Error 발생 
Traceback (most recent call last):
  File "{sourcePath}/test12.py", line 43, in <module>
    prk = rsa.PrivateKey.load_pkcs1(key)
  File "C:\ProgramData\Anaconda3\lib\site-packages\rsa\key.py", line 124, in load_pkcs1
    return method(keyfile)
  File "C:\ProgramData\Anaconda3\lib\site-packages\rsa\key.py", line 592, in _load_pkcs1_pem
    return cls._load_pkcs1_der(der)
  File "C:\ProgramData\Anaconda3\lib\site-packages\rsa\key.py", line 527, in _load_pkcs1_der
    key = cls(*as_ints)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Sequence'

 

 

해결한 소스

pem_prefix = '-----BEGIN RSA PRIVATE KEY-----\n'
pem_suffix = '\n-----END RSA PRIVATE KEY-----'
key = '{}{}{}'.format(pem_prefix, v['privateKey'], pem_suffix)

keyPriv = RSA.importKey(key)
cipher = Cipher_PKCS1_v1_5.new(keyPriv)

raw_cipher_data = b64decode(v['password'])
decrypt_text = cipher.decrypt(raw_cipher_data, None).decode()

print("decrypted msg->", decrypt_text)

 

 

마주친 에러 

1. ValueError: Ciphertext with incorrect length.

2. ValueError: RSA key format is not supported

3. binascii.Error: Incorrect padding

4. ValueError: Plaintext is too long.

 

 

 

이용했던 stack overflow

https://stackoverflow.com/questions/35683598/decrypting-large-files-with-rsa-in-pycrypto

https://stackoverflow.com/questions/19242381/how-to-load-adbkey-pub-with-python-rsa

https://stackoverflow.com/questions/44746907/converting-java-crypto-code-to-python-equivalent

https://stackoverflow.com/questions/42668142/how-to-load-rsa-keystring-in-python

https://stackoverflow.com/questions/47245968/valueerror-ciphertext-with-incorrect-length-using-python

 

해결했던 stack overflow 

https://stackoverflow.com/questions/39131630/python-decryption-using-private-key

 

728x90
Comments