AES-шифрование в JAVA и дешифрование в C с использованием openSSL, вызывающее проблему

Я использую приведенный ниже код JAVA для шифрования простого текста, который будет создавать зашифрованный текст, а затем расшифровывать этот зашифрованный текст с помощью ключа (который генерируется с помощью getSecretEncryptionKey (). GetEncoded () в файле JAVA) в коде C ++.

КОД JAVA:

    public byte[] encryptDecrypt(String jsonData, String publicKey) throws Exception
{
Security.addProvider(new BouncyCastleProvider());
SecretKey secKey = getSecretEncryptionKey();

cipherText = encryptText(jsonData, secKey);
return cipherText;
}

public static SecretKey getSecretEncryptionKey() throws Exception
{
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
SecretKey secKey = generator.generateKey();
return secKey;
}
public static byte[] encryptText(String plainText, SecretKey secKey) throws Exception
{
// AES defaults to AES/ECB/PKCS5Padding in Java 7
SecretKeySpec skeySpec = new SecretKeySpec(secKey.getEncoded(), "AES/ECB/PKCS7Padding");

Cipher aesCipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
aesCipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return  aesCipher.doFinal(plainText.getBytes());
}

C ++ КОД:

INT32 Security::decrypt(UINT8 *ciphertext, INT32 ciphertext_len, UINT8 *key,
UINT8 *iv, UINT8 *plaintext)
{
EVP_CIPHER_CTX *ctx;

INT32 len;

INT32 plaintext_len;

/* Create and initialise the context */
if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();

if (!EVP_DecryptInit_ex(ctx, EVP_aes_256_ecb(), 0, key, NULL)) {
printf("\n ERROR!! \n");
return -1;
}

/* Provide the message to be decrypted, and obtain the plaintext output.
* EVP_DecryptUpdate can be called multiple times if necessary
*/
if(1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))
handleErrors();
plaintext_len = len;

/* Finalise the decryption. Further plaintext bytes may be written at
* this stage.
*/
if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) handleErrors();
plaintext_len += len;

/* Clean up */
EVP_CIPHER_CTX_free(ctx);

return plaintext_len;
}

При дешифровании CipherText с использованием Key, код C ++ генерирует ошибку сегментации и выдает ошибку ниже:

140159077054088: ошибка: 06065064: подпрограммы цифрового конверта: EVP_DecryptFinal_ex: плохая расшифровка: evp_enc.c: 596:
Прервано (ядро сброшено)

Я новичок в этой области, поэтому, пожалуйста, помогите мне.

1

Решение

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

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

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

По вопросам рекламы [email protected]