У меня есть код с одной стороны, написанный на 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 ++?