Encryption for iOS 3des not same as android and .net

后端 未结 3 478
春和景丽
春和景丽 2020-12-15 02:28

I\'m trying do some encrypt something using 3des on the iOS that must match the results from java and .NET.

Java code is :

public cl         


        
3条回答
  •  一生所求
    2020-12-15 02:37

    How serious in decrypted?

    - (NSString *)encrypt:(NSString *)encryptValue key:(NSString *)key24Byte IV:(NSString *)IV{
        // first of all we need to prepare key
        if([key length] != 24)
            return @"Require 24 byte key, call function generate24ByteKeySameAsAndroidDotNet with a 16Byte key same as used in Android and .NET"; //temporary error message
    
    
        NSData *keyData = [key24Byte dataUsingEncoding:NSUTF8StringEncoding];
    
        // our key is ready, let's prepare other buffers and moved bytes length
        NSData *encryptData = [encryptValue dataUsingEncoding:NSUTF8StringEncoding];
        size_t resultBufferSize = [encryptData length] + kCCBlockSize3DES;
        unsigned char resultBuffer[resultBufferSize];
        size_t moved = 0;
    
        // DES-CBC requires an explicit Initialization Vector (IV)
        // IV - second half of md5 key
        NSMutableData *ivData = [[IV dataUsingEncoding:NSUTF8StringEncoding]mutableCopy];
        NSMutableData *iv = [NSMutableData dataWithData:ivData];
    
        CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES,
                                                kCCOptionPKCS7Padding , [keyData bytes],
                                                kCCKeySize3DES, [iv bytes],
                                                [encryptData bytes], [encryptData length],
                                                resultBuffer, resultBufferSize, &moved);
    
        if (cryptorStatus == kCCSuccess) {
            return [[NSData dataWithBytes:resultBuffer length:moved] base64EncodedStringWithOptions:0];
        } else {
            return nil;
        }
    }
    

提交回复
热议问题