МакЭлис (Баунси Кастл) Получение обратно открытого ключа

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

Ниже то, что у меня есть на данный момент:

        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, и что «McEliece» не считается алгоритмом, поскольку я получаю NoSuchAlgorithmException, но я не совсем уверен, что еще попробовать в данный момент. я также пытался использовать KeyFactory, который включен в BouncyCastle для McEliece, но не имел успеха, поскольку методы были либо защищены, либо не допускали KeySpec и хотели SubjectPublicKeyInfo, в котором я не мог понять, как изменить KeySpec или массив байтов в.

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

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


person Mr_Folo    schedule 20.02.2017    source источник


Ответы (1)


Удалось разобраться в вопросе. мне нужно было добавить:

           Security.addProvider(new BouncyCastleProvider());
           Security.addProvider(new BouncyCastlePQCProvider());
person Mr_Folo    schedule 20.02.2017
comment
Спасибо за сообщение, MrFolo, вы можете принять свой ответ через некоторое время (день или 2, если я не ошибаюсь). - person Maarten Bodewes; 21.02.2017