Base64编码为NSString

我正在尝试将用户名和密码发布到服务器。 我想将这个用户名和密码转换成Base64编码。 所以这个编码的string将被添加到授权字段。

是否有任何API可用于在iOS中执行Base64编码,或者我们自己编写?

我如何做iphone-sdk的base64编码?

看看这个。

然后使用这些方法来使用上面的方法(在链接中给出) 将NSString转换为从上面链接获取的XML序列化的Base64数据 。

+ (NSString *)toBase64String:(NSString *)string { NSData *data = [string dataUsingEncoding: NSUnicodeStringEncoding]; NSString *ret = [NSStringUtil base64StringFromData:data length:[data length]]; return ret; } + (NSString *)fromBase64String:(NSString *)string { NSData *base64Data = [NSStringUtil base64DataFromString:string]; NSString* decryptedStr = [[NSString alloc] initWithData:base64Data encoding:NSUnicodeStringEncoding]; return [decryptedStr autorelease]; } 

这可以通过实现base64转换的类方法来完成,下面的代码是用于转换的。

 + (NSString*)base64forData:(NSData*)theData { const uint8_t* input = (const uint8_t*)[theData bytes]; NSInteger length = [theData length]; static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; uint8_t* output = (uint8_t*)data.mutableBytes; NSInteger i; for (i=0; i < length; i += 3) { NSInteger value = 0; NSInteger j; for (j = i; j < (i + 3); j++) { value <<= 8; if (j < length) { value |= (0xFF & input[j]); } } NSInteger theIndex = (i / 3) * 4; output[theIndex + 0] = table[(value >> 18) & 0x3F]; output[theIndex + 1] = table[(value >> 12) & 0x3F]; output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; } return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]; } 

并在您的URL请求添加以下代码以发送授权的用户名和密码…

[请求addValue:[NSString stringWithFormat:@“Basic%@”,[className base64forData:[[NSString stringWithFormat:@“%@:%@”,UsernameString,passwordString] dataUsingEncoding:NSUTF8StringEncoding]]] forHTTPHeaderField:@“Authorization”] ;