iOS于JAVA后臺的AES兼容

@(iOS學習)[ios | 筆記]

iOS于JAVA后臺的AES兼容

iOS的AES Padding只支持ccPKCS7Padding, ccNoPadding, 而如果JAVA后端的AES加密解密用到PKCS5Padding的話, 那么iOS端就需要自己去實現(xiàn)了.

代碼如下:

- (NSString*) EncodeText:(NSString*)plainText enc:(CCOperation)encryptOrDecrypt{
    
    const void *vplainText;
    size_t plainTextBufferSize;
    
    if (encryptOrDecrypt == kCCDecrypt)
    {
        NSString *base64EncodedString = [[plainText dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
        NSData *encryptData = [[NSData alloc]initWithBase64EncodedString:base64EncodedString options:0];
        plainTextBufferSize = [encryptData length];
        vplainText = [encryptData bytes];
    }
    else
    {
        plainTextBufferSize = [plainText length];
        vplainText = (const void *) [plainText UTF8String];
    }
    
    CCCryptorStatus ccStatus;
    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t movedBytes = 0;
    
    bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
    bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
    memset((void *)bufferPtr, 0x0, bufferPtrSize);
    
    // 設(shè)置你的AES key
    const unsigned char *keyString = (const unsigned char *)[@"ASAF#Key$M0BiLE!WS@DG_1@"  cStringUsingEncoding: NSUTF8StringEncoding];
    // 這里你的AES IV
    const unsigned char *initializeVactorString = (const unsigned char *)[@"ASAF@DG#" cStringUsingEncoding: NSUTF8StringEncoding];
    
    uint8_t iv[kCCBlockSize3DES];
    memset((void *) iv, 0x0, (size_t) sizeof(iv));
    
    ccStatus = CCCrypt(encryptOrDecrypt,
                       kCCAlgorithm3DES,
                       kCCOptionPKCS7Padding,
                       keyString,
                       kCCKeySize3DES,
                       initializeVactorString,
                       vplainText,
                       plainTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);
    
    if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
    else{
        if (ccStatus == kCCParamError) return @"PARAM ERROR";
        else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
        else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
        else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
        else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
        else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED";
    }
    
    NSString *result;
    if (encryptOrDecrypt == kCCDecrypt)
    {
        result = [ [NSString alloc] initWithData: [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding];
    }
    else
    {
        NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
        result = [myData base64EncodedStringWithOptions:0];
    }
    NSLog(@"%@",result);

    return result;
}

參看:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,111評論 25 709
  • AES是開發(fā)中常用的加密算法之一。然而由于前后端開發(fā)環(huán)境差異,導致出現(xiàn)前端加密而后端不能解密的情況出現(xiàn)。然而無論什...
    醉臥欄桿聽雨聲閱讀 2,830評論 3 3
  • 白巖松 (2015),《白說 》,長江文藝出版社 這兩天讀白巖松,心里的感覺很不一樣。這不是一個古代的人隔空和我們...
    ScarlettK閱讀 791評論 0 1
  • 春節(jié)假期,就這么一溜煙的跑沒影兒了,留下一堆肉肉…… 別愁啊,往(阿)好(Q)了(精)想(神)。假期沒了,我們還有...
    周末去哪兒小末閱讀 456評論 0 1
  • 宜信全球 產(chǎn)品定位:金融理財產(chǎn)品電商平臺 面向人群:對中,高端理財產(chǎn)品的需求者,具有一定的經(jīng)濟基礎(chǔ),對國際理財有認...
    超設(shè)計閱讀 503評論 0 1

友情鏈接更多精彩內(nèi)容