1

我使用下面的代码对目标 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 *input编码方法中的参数指向一个Objective-C结构,而不是一个C字符串。所以你的编码方法似乎有效。它编码了一些东西,但不是输入字符串。然后解码方法失败了

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

因为解码的数据不包含有效的 UTF-8。)

于 2012-12-21T06:06:19.333 回答