2013-09-06 4 views
1

사용자를 장고 기반 서버에 로깅하는 Android 앱을 만들려고합니다. 나는 사용자 이름과 암호를 암호화하여 보안을 강화하려고 노력하고 있지만 서버 측에서 제대로 해독되지 않는 이유가 있습니다.Android RSA 암호화 및 Python 암호 해독

Java 암호화와 PyCrypto 암호화가 약간 다르며 호환성 문제가 발생한다고 생각되지만 실제로 문제가 무엇인지 알기에는 너무 초록색입니다.

public String encrypt_rsa(String original) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException 
{ 
    Resources res = getResources(); 
    InputStream is = res.openRawResource(R.raw.public_key); 
    byte[] encodedKey = new byte[is.available()]; 
    is.read(encodedKey); 
    X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey); 
    KeyFactory kf = KeyFactory.getInstance("RSA"); 
    PublicKey pkPublic = kf.generatePublic(publicKeySpec); 

    Cipher pkCipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING"); 
    pkCipher.init(Cipher.ENCRYPT_MODE, pkPublic); 
    byte[] encryptedInByte = pkCipher.doFinal(original.getBytes()); 
    String encryptedInString = new String(Base64Coder.encode(encryptedInByte)); 
    is.close(); 

    return encryptedInString; 
} 

을 그리고 여기 내 파이썬 코드

from Cryto.PublicKey import RSA 

def decrypt(encoded_text): 

    f = open("/path_to_file/private_key.pem", 'r') 
    priv_key = RSA.importKey(f) 

    encrypted_text = base64.b64decode(encoded_text) 

    plain_text = priv_key.decrypt(encrypted_text) 

    return plain_text 

의 어떤 도움은 대단히 감사하겠습니다 :

여기 (this 튜토리얼을 따라) 응용 프로그램의 암호화 코드입니다!

+0

제대로 해독하지 않으면 매우 유용한 오류 설명이 아닙니다 ... –

답변

0

Java 코드가 PKCS # 1 v1.5 RSA 암호화를 사용하고 있습니다.이 암호화는 심각하게 손상되고 안전하지 않은 프로토콜입니다.

는 암호 해독 적절한 모듈을 파이썬에서 수행했다 가졌 :

from Crypto.Cipher import PKCS1_v1_5 

priv_key = RSA.importKey(f) 
cipher = PKCS1_v1_5.new(priv_key) 
plain_text = cipher.decrypt(encrypted_text) 

더 자세한 정보는, the module documentation를 참조하십시오.