Different AES256 result between Java and OpenSSL on iOS

Yasser Ajaj

I've a Java web service returns AES byte array, and other function returns encrypted data (byte array) with this key,

From the other side, I've ios app that calls get AES key, then calls get encrypted data, I included OpenSSL lib on ios app, and it will decrypt encrypted data with AES key that returned before,

My code in Java:

public static byte[] encryptWithAES(byte[] message, Key AESkey) throws Exception {
    byte[] decryptedMessage = null;
    try {
        Cipher encrypt = Cipher.getInstance("AES");
        encrypt.init(Cipher.ENCRYPT_MODE, AESkey);
        decryptedMessage = encrypt.doFinal(message);
    } catch (Exception ex) {
        System.err.println(ex.getMessage());
        throw ex;
    }
    return decryptedMessage;
}

The code in ios:

unsigned char* ucKey = (unsigned char*)[self.AESKeyByte bytes];
AES_KEY wctx;
AES_set_encrypt_key(ucKey, 256, &wctx);
unsigned char* dataDec = (unsigned char *)calloc(size, sizeof(unsigned char*));
unsigned char* encryptedData = (unsigned char*)[value bytes];
AES_decrypt(encryptedData, dataDec, &wctx);
int sizeoddatadec = (int)strlen((char*)dataDec);
NSData* decryptedData = [NSData dataWithBytes:(const void *)dataDec length:sizeof(unsigned char)*sizeoddatadec];
NSString* stringDec = [NSString stringWithUTF8String:[decryptedData bytes]];

The AES key on java is:

ec d6 55 8b 43 70 e9 e4 9f 8c 62 d4 42 b2 c7 46 19 ff 13 c8 10 bb d0 04 ed e4 5b 78 11 1d c7 5d

plain text is: "AChamieh"

And the self.AESKeyByte on ios is:

ec d6 55 8b 43 70 e9 e4 9f 8c 62 d4 42 b2 c7 46 19 ff 13 c8 10 bb d0 04 ed e4 5b 78 11 1d c7 5d

Decrypted data: 64 ee 6a b8 2c 29 16 17 9f 78 cf cb b6 ad e5 cd

Any help for this issue please?

Yasser Ajaj

For ECB:

The java code will be

public static byte[] encryptWithAES(byte[] message, Key AESkey) throws Exception {
byte[] decryptedMessage = null;
try {
    Cipher encrypt = Cipher.getInstance("AES/ECB/PKCS5Padding"); // here is the change
    encrypt.init(Cipher.ENCRYPT_MODE, AESkey);
    decryptedMessage = encrypt.doFinal(message);
} catch (Exception ex) {
    System.err.println(ex.getMessage());
    throw ex;
}
return decryptedMessage;
}

For CBC:

The java code will be

    public static byte[] encryptWithAES(byte[] message, Key AESkey, byte[] iv) throws Exception {
byte[] decryptedMessage = null;
try {
    Cipher encrypt = Cipher.getInstance("AES/CBC/PKCS5Padding");  // here is the change
    encrypt.init(Cipher.ENCRYPT_MODE, AESkey,new IvParameterSpec(iv)); // and I add the iv for cbc
    decryptedMessage = encrypt.doFinal(message);
} catch (Exception ex) {
    System.err.println(ex.getMessage());
    throw ex;
}
return decryptedMessage;
}

Edit (2):

Depends on @zaph said the previous objective c will take twice process,

I updated the objective c code :

- (NSData *) AESECB : (NSData *) data withKey :(NSData *) key : (CCOperation) operation{

CCCryptorStatus ccStatus = kCCSuccess;
NSUInteger dataLength = data.length;
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc( bufferSize );

size_t numBytes = 0;

ccStatus = CCCrypt(operation,  // will pass kCCDecrypt or kCCEncrypt
                   kCCAlgorithmAES,
                   kCCOptionECBMode | kCCOptionPKCS7Padding,
                   [key bytes],
                   [key length],
                   nil,
                   [data bytes],
                   [data length],
                   buffer,
                   bufferSize,
                   &numBytes);

if( ccStatus == kCCSuccess )
{
    return [NSData dataWithBytes:buffer length:numBytes];
}

free(buffer);
return nil;
}

- (NSData *) AESCBC : (NSData *) data withKey: (NSData *) key : (CCOperation) operation{
CCCryptorStatus ccStatus = kCCSuccess;
NSUInteger dataLength = data.length;
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc( bufferSize );

size_t numBytes = 0;

ccStatus = CCCrypt(operation,  // will pass kCCDecrypt or kCCEncrypt
                   kCCAlgorithmAES,
                   kCCOptionPKCS7Padding,
                   [key bytes],
                   [key length],
                   self.IV.bytes,
                   [data bytes],
                   [data length],
                   buffer,
                   bufferSize,
                   &numBytes);

if( ccStatus == kCCSuccess )
{
    return [NSData dataWithBytes:buffer length:numBytes];
}

free(buffer);
return nil;
}

Many thanks @zaph for your advice again.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

AES256 encryption get different result between node.js and objective-c

From Dev

Different results in AES256 encryption in Swift (iOS) and PHP

From Dev

iOS & .NET Produce Different AES256 Results

From Dev

Java and openssl C different AES CTR encryption result

From Dev

implementing AES256 encryption into IOS

From Dev

Link error when using AES256 example with OpenSSL

From Dev

Openssl hmac generates different result

From Dev

Different AES128 with zero padding encryption result between php and java

From Dev

AES256 Encryption/Decryption Error+ IOS SDK 7

From Dev

AES256 Encryption/Decryption Error+ IOS SDK 7

From Dev

AES-256 from OpenSSL produces a different ciphertext each time

From Dev

Pr0blem with AES256 encryption in java

From Dev

Whats is the Java name for openssl's "aes-256-cfb"?

From Dev

Murmur3 hash different result between Python and Java implementation

From Dev

MD5 generate different result between C# and Java

From Dev

Murmur3 hash different result between Python and Java implementation

From Dev

SHA 256 Different Result

From Dev

SHA256 Hash algorithm produces different results in iOS using Common Crypto and OpenSSL

From Dev

OpenSSL SHA256 Wrong result

From Dev

AES decryption result varies after openssl upgrade

From Dev

PHP AES256 PKCS7 decryption from iOS Swift

From Dev

Different output between OpenSSL and Mcrypt in PHP - why?

From Dev

Rails : Different between activerecord result

From Dev

different result between debug and release

From Dev

Java Encrypt a file using aes256/ CBC/PKCS7Padding

From Dev

How to handle BadPaddingException During AES256 encryption in C# and decryption in Java

From Dev

Java: Patching client side security policy from applet for AES256

From Dev

AES256 JAVA encryption doesn't match C# encryption

From Dev

Unable to exchange AES-256-CBC/PKCS7 between C# bouncycastle and PHP openssl

Related Related

  1. 1

    AES256 encryption get different result between node.js and objective-c

  2. 2

    Different results in AES256 encryption in Swift (iOS) and PHP

  3. 3

    iOS & .NET Produce Different AES256 Results

  4. 4

    Java and openssl C different AES CTR encryption result

  5. 5

    implementing AES256 encryption into IOS

  6. 6

    Link error when using AES256 example with OpenSSL

  7. 7

    Openssl hmac generates different result

  8. 8

    Different AES128 with zero padding encryption result between php and java

  9. 9

    AES256 Encryption/Decryption Error+ IOS SDK 7

  10. 10

    AES256 Encryption/Decryption Error+ IOS SDK 7

  11. 11

    AES-256 from OpenSSL produces a different ciphertext each time

  12. 12

    Pr0blem with AES256 encryption in java

  13. 13

    Whats is the Java name for openssl's "aes-256-cfb"?

  14. 14

    Murmur3 hash different result between Python and Java implementation

  15. 15

    MD5 generate different result between C# and Java

  16. 16

    Murmur3 hash different result between Python and Java implementation

  17. 17

    SHA 256 Different Result

  18. 18

    SHA256 Hash algorithm produces different results in iOS using Common Crypto and OpenSSL

  19. 19

    OpenSSL SHA256 Wrong result

  20. 20

    AES decryption result varies after openssl upgrade

  21. 21

    PHP AES256 PKCS7 decryption from iOS Swift

  22. 22

    Different output between OpenSSL and Mcrypt in PHP - why?

  23. 23

    Rails : Different between activerecord result

  24. 24

    different result between debug and release

  25. 25

    Java Encrypt a file using aes256/ CBC/PKCS7Padding

  26. 26

    How to handle BadPaddingException During AES256 encryption in C# and decryption in Java

  27. 27

    Java: Patching client side security policy from applet for AES256

  28. 28

    AES256 JAVA encryption doesn't match C# encryption

  29. 29

    Unable to exchange AES-256-CBC/PKCS7 between C# bouncycastle and PHP openssl

HotTag

Archive