2

Help me to make encryption AES/CBC/PKCS7Padding? Below is my code to decrypt AES/CBC/PKCS7. It's working but when I encrypt some string and decrypt from my self it's error. Below i adding code to encrypt and decrypt AES/CBC/PKCS7Padding.

- (NSData *)AES256Encrypt:(id)key
{
    NSString *iv = @"FEDCBA9876543210";
    NSData *keyPtr = [key copy];
    size_t dataLength = [self length];
    NSData *ivPtr = [iv dataUsingEncoding:NSUTF8StringEncoding];
    //NSData *encrypted = [self subdataWithRange:NSMakeRange(0, [self length])];

    //size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    //void* buffer                = malloc(bufferSize);
    NSMutableData *ret = [NSMutableData dataWithLength:dataLength + kCCBlockSizeAES128];
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                      [keyPtr bytes], kCCKeySizeAES256,
                                      [ivPtr bytes],
                                      [self bytes], dataLength,
                                      [ret mutableBytes], [ret length],
                                      &numBytesDecrypted);

    NSLog(@"Err : %d",cryptStatus);
    NSLog(@"DataLength : %d, num : %d", (int)dataLength, (int)numBytesDecrypted);
    if (cryptStatus == kCCSuccess)
        return ret;

    return nil;
}

- (NSData *)AES256Decrypt:(id)key
{
    NSData *keyPtr = [key copy];
    size_t dataLength = [self length] - kCCBlockSizeAES128;
    NSData *ivPtr = [self subdataWithRange:NSMakeRange(0, kCCBlockSizeAES128)];
    NSData *encrypted = [self subdataWithRange:NSMakeRange(kCCBlockSizeAES128, dataLength)];

    NSMutableData *ret = [NSMutableData dataWithLength:dataLength + kCCBlockSizeAES128];
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                      [keyPtr bytes], kCCKeySizeAES256,
                                      [ivPtr bytes], /* initialization vector (optional) */
                                      [encrypted bytes], dataLength, /* input */
                                      [ret mutableBytes], [ret length], /* output */
                                      &numBytesDecrypted);

    NSLog(@"Err : %d",cryptStatus);
    NSLog(@"DataLength : %d, num : %d", (int)dataLength, (int)numBytesDecrypted);
    if (cryptStatus == kCCSuccess)
        return ret;

    return nil;
}

My String : "abcd"

Encrypt from Python = "fl6h8iBeXGO03ZIKzpDMwMaNc7Y1PsRc/s6XJKPCxKNyrYResv3oO1/bkbofmY7y8e2wOe2sIpk="

gregkyt
  • 21
  • 5
  • Your question is very unclear. What is the error? When do you get the error? With what value? – rmaddy Sep 09 '16 at 04:50
  • i just get only Err : -4301 – gregkyt Sep 09 '16 at 04:59
  • Encryption and decryption are heavily interlinked. Usually we have to see both as in this case. Please [edit] your question to show both. – Artjom B. Sep 09 '16 at 05:30
  • To check your encryption code, use some [test vectors](https://github.com/ircmaxell/quality-checker/blob/master/tmp/gh_18/PHP-PasswordLib-master/test/Data/Vectors/aes-cbc.test-vectors) for AES/CBC (no padding needed) and confirm that your cyphertext matches to cyphertext in the test vector. – rossum Sep 10 '16 at 09:43

0 Answers0