1

以下のコードを使用して、Objective C で文字列をエンコードおよびデコードします。エンコードは良好です。デバッグすると、入力が @"1" の場合にハッシュ文字列がスローされることがわかります。しかし、このハッシュ文字列をデコードしようとすると、nil が返されます。

私を助けてください。

+(NSString *)encrypt: (NSString*) input
{

    //Base64 Encoding

    char base64Result[32];
    size_t theResultLength = 32;
    Base64EncodeData(input, 20, base64Result, &theResultLength);
    NSData *theData = [NSData dataWithBytes:base64Result length:theResultLength];
    NSString *base64EncodedResult = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

    NSString* decryptedString = [self decrypt:base64EncodedResult];
    return [base64EncodedResult autorelease];
}
+ (NSString *) decrypt:(NSString*) input{

        Byte inputData[[input lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];//prepare a Byte[]
    [[input dataUsingEncoding:NSUTF8StringEncoding] getBytes:inputData];//get the pointer of the data
    size_t inputDataSize = (size_t)[input length];
    size_t outputDataSize = EstimateBas64DecodedDataSize(inputDataSize);//calculate the decoded data size
    Byte outputData[outputDataSize];//prepare a Byte[] for the decoded data
    Base64DecodeData(inputData, inputDataSize, outputData, &outputDataSize);//decode the data
    NSData *theData = [[NSData alloc] initWithBytes:outputData length:outputDataSize];//create a NSData object from the decoded data
    NSString *result = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
    return [result autorelease];
}
4

1 に答える 1

0

エンコーディング方法では、入力文字列をバイトバッファに変換し、それを次のアドレスにフィードする必要がありますBase64EncodeData

NSData *inputData = [input dataUsingEncoding:NSUTF8StringEncoding];
Base64EncodeData([inputData bytes], [inputData length], base64Result, &theResultLength, NO);

NSString *inputencodingメソッドの引数は、C文字列ではなくObjective-C構造を指しています。したがって、encodingメソッドは機能しているようです。何かをエンコードしますが、入力文字列はエンコードしません。デコードメソッドはで失敗します。

NSString *result = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

デコードされたデータには有効なUTF-8が含まれていないためです。)

于 2012-12-21T06:06:19.333 に答える