0

В настоящее время я пытаюсь реализовать шифрование McEliece, используя BC, но столкнувшись с некоторыми проблемами. В настоящее время у меня есть возможности создавать ключи и помещать их в файл, я могу прочитать их обратно в программу, но не могу заставить его перейти от байтов к открытому ключу.McEliece (Bouncy Castle) Получение открытого ключа

Ниже то, что я в настоящее время:

 public static String EncryptText(Component tmp, String Plaintext) throws InvalidKeyException, InvalidCipherTextException { 
    String CipherText = "Didnt Work"; 
    try { 
     // The message to encrypt. 
     byte[] messageBytes = Plaintext.getBytes(); 

     //read in the Public Key to use to Encrypt. 
     File f = new File(tmp.getPublicKey()); 
     FileInputStream fis = new FileInputStream(f); 
     byte[] PubKeybytes = new byte[fis.available()]; 
     fis.read(PubKeybytes); 
     fis.close(); 


     //turn the bytes into the Key. 
     X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(PubKeybytes); 
     SubjectPublicKeyInfo PKI ; 
     KeyFactory KF = null; 
     try { 
      KF = KeyFactory.getInstance("McEliece"); 
     } catch (NoSuchAlgorithmException ex) { 
      Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     PublicKey PK = null; 
     try { 
      PK = KF.generatePublic(pubKeySpec); 
     } catch (InvalidKeySpecException ex) { 
      Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     //Public Key 
     PublicKey aPublic = PK; 
     McEliecePublicKeyParameters GPKP = (McEliecePublicKeyParameters) McElieceKeysToParams.generatePublicKeyParameter(aPublic); 

     //set the public key to use. 
     McElieceCipher EnCipheredText = new McElieceCipher(); 
     EnCipheredText.init(true, GPKP); 
     EnCipheredText.initCipherEncrypt(GPKP); 

     byte[] ciphertextBytes; 

     //sign the message with the public key. 
     ciphertextBytes = EnCipheredText.messageEncrypt(messageBytes); 
     CipherText = new String(ciphertextBytes); 
     return CipherText; 
    } catch (IOException ex) { 
     Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return CipherText; 
}\ 

В настоящее время им ошибки, имеющие этот код с KeyFactory и «Мак-Элиса» не рассматривается алгоритм, как им получить NoSuchAlgorithmException, но им не совсем уверен, что еще попробовать в данный момент. Я также попытался использовать KeyFactory, который включен в BouncyCastle для McEliece, но не имел успеха, поскольку методы были либо защищены, либо не позволяли KeySpec и хотели, чтобы SubjectPublicKeyInfo, который я не мог понять, как изменить KeySpec в массив Byte в.

Извините, если это простой вопрос, довольно новый для кодирования криптографии.

Спасибо за ответы заранее.

ответ

1

Удалось решить проблему. я бы хотел (а) добавить:

  Security.addProvider(new BouncyCastleProvider()); 
      Security.addProvider(new BouncyCastlePQCProvider()); 
+0

Благодарим за сообщение о возвращении MrFolo. Вы можете принять свой ответ через некоторое время (день или два, если я не ошибаюсь). –