Шифрование файлов с помощью AES в Java, decrtypion в C ++ с использованием cryptopp

Я экспериментирую с библиотекой Crypto ++ и библиотекой javax.crypto.

Итак, что я пытаюсь сделать, это … зашифровать текстовый файл с использованием AES с режимом CFB в Java, а затем расшифровать зашифрованный файл с помощью crypto ++ в C ++

вот класс Java для шифрования

public class CryptoUtils {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/CFB8/NoPadding";

Charset CHARSET = Charset.forName("UTF8");

public static void encrypt(byte[] key, byte[] iv, File inputFile, File outputFile) throws CryptoException {
doCrypto(Cipher.ENCRYPT_MODE, key, iv, inputFile, outputFile);
}

public static void decrypt(byte[] key, byte[] iv, File inputFile, File outputFile) throws CryptoException {
doCrypto(Cipher.DECRYPT_MODE, key, iv, inputFile, outputFile);
}

private static void doCrypto(int cipherMode, byte[] key, byte[] iv, File inputFile, File outputFile)
throws CryptoException {
try {
Key secretKey = new SecretKeySpec(key, ALGORITHM);
IvParameterSpec ivSpec = new IvParameterSpec(iv);

Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(cipherMode, secretKey, ivSpec);

FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int) inputFile.length()];
inputStream.read(inputBytes);

byte[] outputBytes = cipher.doFinal(inputBytes);

FileOutputStream outputStream = new FileOutputStream(outputFile);
outputStream.write(outputBytes);

inputStream.close();
outputStream.close();
} catch (Exception e) {
throw new CryptoException("Error encrypting/decrypting file", e);
}
}
}

вот вызывающий класс с инициализированным ключом и iv …

public class Main {
public static void main(String[] args) {
byte[] key = new byte[16];
byte[] iv = new byte[16];

for(int i = 0; i < key.length; i++) {
key[i] = 0x0;
iv[i] = 0x0;
}

Charset CHARSET = Charset.forName("UTF8");

String keyStr = new String(key);
String ivStr = new String(iv);

File inputFile = new File("target.txt");
File encryptedFile = new File("target.enc");
File decryptedFile = new File("target.dec");

try {
//CryptoUtils.decrypt(keyStr.getBytes(CHARSET), ivStr.getBytes(CHARSET), encryptedFile, decryptedFile);
//CryptoUtils.encrypt(keyStr.getBytes(CHARSET), ivStr.getBytes(CHARSET), inputFile, encryptedFile);
CryptoUtils.encrypt(key, iv, inputFile, encryptedFile);
//CryptoUtils.decrypt(key, iv, encryptedFile, decryptedFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}

и вот код C ++ …

byte key[AES::DEFAULT_KEYLENGTH];
byte iv[AES::DEFAULT_KEYLENGTH];

void encrypt64(char* in, char* out) {
CFB_Mode<AES>::Encryption e;
e.SetKeyWithIV(key, sizeof(key), iv);

FileSource f(in, true,
new StreamTransformationFilter(e,
new HexEncoder(new FileSink(out))));
}

void decrypt64(char* in, char* out) {
CFB_Mode<AES>::Decryption d;
d.SetKeyWithIV(key, sizeof(key), iv);

FileSource f(in, true,
new HexDecoder(new StreamTransformationFilter(d, new FileSink(out))));
}

int main() {
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);

decrypt64("target.enc", "target.dec2");

return 0;
}

поскольку его кажущийся ключ и iv в обоих кодах одинаковы. все еще это не работает ..

Я был в эти часы сейчас … но, поскольку я новичок в криптографии и криптографических библиотеках .., поэтому не мог найти ответ или может быть найден, но не попал в мою голову …: /

в любом случае .. пожалуйста, дайте мне знать, что я делаю неправильно и как я могу это исправить … заранее спасибо 🙂

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector