NSString加密,解密和64编码
来源:互联网 发布:sql 2005 32位 下载 编辑:程序博客网 时间:2024/06/05 04:58
#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 = [self length];
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 [NSData dataWithBytesNoCopy: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 = [self length];
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 [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
returnnil;
}
- (NSString *)newStringInBase64FromData //追加64编码
{
NSMutableString *dest = [[NSMutableStringalloc] initWithString:@""];
unsigned char * working = (unsignedchar *)[self bytes];
int srcLen = [self length];
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;
unsigned char 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
- NSString加密,解密和64编码
- NSString加密,解密和64编码
- java加密解密和编码转换
- JavaBase64编码 加密解密
- base 64 加密 和 解密
- base64编码和aes加密和解密配置文件
- 数据的加密和解密,实际是编码和解码
- java 中字符串加密解密 字符编码转换 有利于url 的加密和解密
- MD5和SHA1加密,DES加密和解密,Base64编码解码。
- 数据加密和解密
- XML加密和解密
- Base64加密和解密
- 加密和解密算法
- 加密和解密
- Java加密和解密
- java 加密和解密
- 加密和解密
- EFS加密和解密
- uvaoj 490 - Rotating Sentences
- 项目 [ 资料 ]
- 正则表达式
- 网站优化 SEO概念
- 电子工程师的出路
- NSString加密,解密和64编码
- 转:豆瓣为什么短期内会这么成功?
- 西蒙iphone-OpenGL ES 教程-03
- OPENFILENAME示例代码
- 模板语言velocity项目例子
- oracle 装了三遍终于明白了
- 自学WPF--第八课FlowDocument
- java context解释
- Android画图之抗锯齿