2016-08-24 2 views
-1

У меня есть зашифрованная строка. Шифрование выполняется с использованием java-кода. Я расшифровать зашифрованную строку, используя следующий код JavaРасшифровка Python с использованием закрытого ключа

InputStream fileInputStream = getClass().getResourceAsStream(
        "/private.txt"); 
      byte[] bytes = IOUtils.toByteArray(fileInputStream); 



private String decrypt(String inputString, byte[] keyBytes) { 
     String resultStr = null; 
     PrivateKey privateKey = null; 
     try { 
      KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
      EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(keyBytes); 
      privateKey = keyFactory.generatePrivate(privateKeySpec); 
     } catch (Exception e) { 
      System.out.println("Exception privateKey::::::::::::::::: " 
        + e.getMessage()); 
      e.printStackTrace(); 
     } 
     byte[] decodedBytes = null; 
     try { 
      Cipher c = Cipher.getInstance("RSA/ECB/NoPadding"); 
      c.init(Cipher.DECRYPT_MODE, privateKey); 
      decodedBytes = c.doFinal(Base64.decodeBase64(inputString)); 

     } catch (Exception e) { 
      System.out 
        .println("Exception while using the cypher::::::::::::::::: " 
          + e.getMessage()); 
      e.printStackTrace(); 
     } 
     if (decodedBytes != null) { 
      resultStr = new String(decodedBytes); 
      resultStr = resultStr.split("MNSadm")[0]; 
      // System.out.println("resultStr:::" + resultStr + ":::::"); 
      // resultStr = resultStr.replace(salt, ""); 
     } 
     return resultStr; 

    } 

Теперь я должен использовать Python для расшифровки зашифрованной строки. У меня есть секретный ключ. Когда я использую пакет Cryptography, используя следующий код

key = load_pem_private_key(keydata, password=None, backend=default_backend()) 

Он бросает ValueError: Could not unserialize key data.

Может кто-нибудь помочь, что я здесь отсутствует?

+0

Никогда не используйте учебник RSA. Использование прокладки или плохой прокладки очень небезопасно. В настоящее время вы должны использовать OAEP вместо стандартного дополнения PKCS # 1 v1.5. Поэтому вы должны, вероятно, использовать 'Cipher.getInstance (« RSA/ECB/OAEPWithSHA-256AndMGF1Padding »);' –

ответ

2

я понял, решение:

from Crypto.PublicKey import RSA 
from Crypto.Signature import PKCS1_v1_5 
from Crypto.Hash import SHA 
from base64 import b64decode 

rsa_key = RSA.importKey(open('private.txt', "rb").read()) 
verifier = PKCS1_v1_5.new(rsa_key) 
raw_cipher_data = b64decode(<your cipher data>) 
phn = rsa_key.decrypt(raw_cipher_data) 

Это наиболее основная форма коды. Я узнал, что сначала вам нужно получить RSA_key (закрытый ключ). Для меня RSA.importKey позаботился обо всем. На самом деле просто.

Смежные вопросы