0

我一直在用头撞墙,我一定错过了什么。在我对一些加密文本进行 base64 编码之后,就会调用此代码。在我调用 NSLog 签名的地方总是有效的。然而,有时其余的效果很好,而其他时候 removePlus 或 finalSig 则返回 null。此外,我使用的是 Xcode 4.5、ios6,并且我为该项目启用了 ARC。我觉得可能有些东西在我想要之前就自动发布了,或者类似的东西。如果有人有任何想法,我们将不胜感激。

// Get the data out of the context
char *outputBuffer;
long outputLength = BIO_get_mem_data(context, &outputBuffer);

NSMutableString *signature = [[NSMutableString alloc] init];
[signature appendString:[NSMutableString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]];

NSLog(@"Base64 Pre Encoded: %@", signature);

signature = [[signature stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] mutableCopy];
NSMutableString *removePlus = [[signature stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"] mutableCopy];
NSString *finalSig = [removePlus stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];

//now we create the url request portion
NSMutableString *variables = [[NSMutableString alloc] init];

//set the variables we're going
[variables appendString:finalSig];
4

2 回答 2

0

尝试将您的代码换成以下代码,因为我想它会准确地告诉您问题出在哪里:

// Get the data out of the context
char *outputBuffer;
long outputLength = BIO_get_mem_data(context, &outputBuffer);

outputBuffer[outputLength] = '\0';
if(outputLength != strlen(outputBuffer)) NSLog(@"SOMETHING VERY WRONG");

NSString * signature = [NSString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]];
NSLog(@"Base64 Pre Encoded: %@", signature);

signature = [[signature stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSLog(@"Base64 Post Encoded: %@", signature);

signature = [signature stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
NSLog(@"Base64 Remove '+': %@", signature);

signature = [removePlus stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];
NSLog(@"Base64 Remove '=': %@", signature);

//now we create the url request portion
NSMutableString *variables = [NSMutableString alloc] initWithString:signature];

…

//set the variables we're going
[variables appendString:finalSig];
于 2012-09-16T18:06:50.360 回答
0

原来 NSString * signature = [NSString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]]; 需要一个以空字符结尾的字符串,而我的字符串不是。无论如何,这是创建字符串的更有效方法:

NSData *myRequestData = [ NSData dataWithBytes: [ variables UTF8String ] length: [ variables length ] ];
于 2012-09-17T02:57:40.227 回答