swift實現AES解密


原來的加密解密是用java寫的,用在安卓系統上。現在要用在iOS系統上,所以從服務器上下載過來的加密文件要用swift來實現其的解密方法。

具體過程如下:

給NSData增加一個類目,NSData+AES

NSData+AES.h

- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSData *)iv;

 

NSData+AES.m

- (NSData *)AES128operation:(CCOperation)operation key:(NSString *)key iv:(NSData *)iv

{

    char keyPtr[kCCKeySizeAES128 + 1];

    bzero(keyPtr, sizeof(keyPtr));

    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    

    Byte key2[] = {0xF0,0x1E,0x02,0xB2,0xE3,0xC9,0x7A,0x43,0xFD,0xFE,0x31,0x1A,0x2B,0xA4,0x4C,0x60};

    

    // IV

    Byte ivPtr[kCCBlockSizeAES128 + 1];

    bzero(ivPtr, sizeof(ivPtr));

    //[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

    [iv getBytes:&ivPtr length:16];

    

    size_t bufferSize = [self length] + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    size_t numBytesEncrypted = 0;

    

    CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

                                            key2, kCCKeySizeAES128,

                                            ivPtr,

                                            [self bytes], [self length],

                                            buffer, bufferSize,

                                            &numBytesEncrypted);

    

    if(cryptorStatus == kCCSuccess){

        NSLog(@"Success");

        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

    }else{

        NSLog(@"Error");

    }

    

    free(buffer);

    return nil;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM