Как интерпретировать код шифрования Java AES для C ++? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть код с одной стороны, написанный на java для получения и отправки зашифрованных сообщений. Сообщение должно быть зашифровано с использованием AES 256.

    String secret;
    private Cipher cipher;
    private SecretKey secretKey;
    byte[] header;

    public Encryption(String key, String header){
        secret=key;
        try {
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(secret.getBytes());
            // Generate the key first
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            keyGen.init(256, secureRandom);  // Key size
            secretKey = keyGen.generateKey();
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  // Transformation of the algorithm
        } catch (NoSuchAlgorithmException e) {
            System.out.println("KeyPairGen error: " + e.getMessage());
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        }
    }

, вот как методы шифрования и дешифрования выглядят следующим образом

public byte[]  encrypt(String message) throws EncryptionException {
        try {
            // Create Cipher instance and initialize it to encrytion mode
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, cipher.getParameters());
            byte[] cipherBytes = cipher.doFinal(message.getBytes());
            return cipherBytes;
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }  catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        throw new EncryptionException("Return null");
    }
public String decrypt(byte[] toDecode) throws WrongHeaderException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, InvalidKeyException {
            cipher.init(Cipher.DECRYPT_MODE, secretKey, cipher.getParameters());
            byte[] plainBytesDecrypted = cipher.doFinal(toDecode);
            return new String(plainBytesDecrypted);
    }

У меня также есть приложение на другая сторона написана на C ++, как мне интерпретировать эти блоки кода в код C ++, возможно, используя OpenSSL. Поскольку ключ для шифрования является пользовательским, как следует интерпретировать KeyGenerator с SecureRandom для генерации ключа AES 256 из пользовательского ключа в C ++?

...