NSString加密,解密和64编码

#import<Foundation/Foundation.h>


@classNSString;


@interface NSData (Encryption)


- (NSData *)AES256EncryptWithKey:(NSString *)key;  //加密

- (NSData *)AES256DecryptWithKey:(NSString *)key;  //解密

- (NSString *)newStringInBase64FromData;           //追加64编码

+ (NSString*)base64encode:(NSString*)str;          //同上64编码

@end



//

//  Encryption.m

//  



#import"Encryption.h"

#import<CommonCrypto/CommonCryptor.h>



staticchar base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";


@implementation NSData (Encryption)


- (NSData *)AES256EncryptWithKey:(NSString *)key  //加密

{

char keyPtr[kCCKeySizeAES256+1];

    bzero(keyPtr,sizeof(keyPtr));

    [keygetCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [selflength];

    size_t bufferSize = dataLength +kCCBlockSizeAES128;

    void *buffer =malloc(bufferSize);

    size_t numBytesEncrypted =0;

   CCCryptorStatus cryptStatus =CCCrypt(kCCEncrypt,kCCAlgorithmAES128,

                                          kCCOptionPKCS7Padding | kCCOptionECBMode,

                                          keyPtr,kCCBlockSizeAES128,

                                          NULL,

                                          [selfbytes], dataLength,

                                          buffer, bufferSize,

                                          &numBytesEncrypted);

    if (cryptStatus ==kCCSuccess) {

        return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];

    }

    free(buffer);

returnnil;

}



- (NSData *)AES256DecryptWithKey:(NSString *)key  //解密

{

char keyPtr[kCCKeySizeAES256+1];

    bzero(keyPtr,sizeof(keyPtr));

    [keygetCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [selflength];

    size_t bufferSize = dataLength +kCCBlockSizeAES128;

    void *buffer =malloc(bufferSize);

    size_t numBytesDecrypted =0;

   CCCryptorStatus cryptStatus =CCCrypt(kCCDecrypt,kCCAlgorithmAES128,

                                          kCCOptionPKCS7Padding | kCCOptionECBMode,

                                          keyPtr,kCCBlockSizeAES128,

                                          NULL,

                                          [selfbytes], dataLength,

                                          buffer, bufferSize,

                                          &numBytesDecrypted);

    if (cryptStatus ==kCCSuccess) {

        return [NSDatadataWithBytesNoCopy:buffer length:numBytesDecrypted];

    }

    free(buffer);

returnnil;

}



- (NSString *)newStringInBase64FromData           //追加64编码

{

NSMutableString *dest = [[NSMutableStringalloc] initWithString:@""];

    unsignedchar * working = (unsignedchar *)[self bytes];

    int srcLen = [selflength];

    for (int i=0; i<srcLen; i +=3) {

        for (int nib=0; nib<4; nib++) {

            int byt = (nib ==0)?0:nib-1;

            int ix = (nib+1)*2;

            if (i+byt >= srcLen)break;

            unsignedchar curr = ((working[i+byt] << (8-ix)) &0x3F);

            if (i+nib < srcLen) curr |= ((working[i+nib] >> ix) &0x3F);

            [dest appendFormat:@"%c", base64[curr]];

        }

    }

    return dest;

}


+ (NSString*)base64encode:(NSString*)str

{

if ([strlength] == 0)

return@"";

constchar *source = [strUTF8String];

int strlength  =strlen(source);

char *characters =malloc(((strlength + 2) / 3) * 4);

if (characters ==NULL)

returnnil;

NSUInteger length =0;

NSUInteger i =0;

while (i < strlength) {

char buffer[3] = {0,0,0};

short bufferLength =0;

while (bufferLength <3 && i < strlength)

buffer[bufferLength++] = source[i++];

characters[length++] =base64[(buffer[0] &0xFC) >> 2];

characters[length++] =base64[((buffer[0] &0x03) << 4) | ((buffer[1] &0xF0) >> 4)];

if (bufferLength >1)

characters[length++] =base64[((buffer[1] &0x0F) << 2) | ((buffer[2] &0xC0) >> 6)];

else characters[length++] ='=';

if (bufferLength >2)

characters[length++] =base64[buffer[2] &0x3F];

else characters[length++] ='=';

}

NSString *g = [[[NSStringalloc] initWithBytesNoCopy:characterslength:length encoding:NSASCIIStringEncodingfreeWhenDone:YES]autorelease];

return g;

}



@end


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值