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

Turns out that NSString * signature = [NSString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]]; requires a null terminated string and my string was not. Anyway this was a more effective way to create the string:

NSData *myRequestData = [ NSData dataWithBytes: [ variables UTF8String ] length: [ variables length ] ];
于 2012-09-17T02:57:40.227 に答える
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 に答える