删除\ x01,\ x02 .....等。从解码3DES后的NSString开始

时间:2017-06-22 11:25:04

标签: ios objective-c

例如:

原文:“123456”

3DES编码文字:“VjARiuJ9BeE =”

解码3DES:“123456 \ x02 \ x02”

如何删除\ x01,\ x02等字符。 ?

enter image description here

NSLog知道如何避免这些字符,但变量仍然有\ x01,\ 02 ......等。

在python中,拥有属性string.printable可以避免这些字符。

在iOS中,如何避免?

感谢。

2 个答案:

答案 0 :(得分:0)

尝试使用此代码,它将完美解码,

[self htmlDecode:@"123456\x02\x02"];

-(NSString *)htmlDecode:(NSString *)htmlString
{
    NSData* stringData = [htmlString dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* options = @{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType};
    NSAttributedString* decodedAttributedString = [[NSAttributedString alloc] initWithData:stringData options:options documentAttributes:NULL error:NULL];
    NSString* decodedString = [decodedAttributedString string];
    NSLog(@"%@",decodedString);
    return decodedString;

}

答案 1 :(得分:0)

ccStatus = CCCrypt(kCCDecrypt,
                   kCCAlgorithm3DES,
                   kCCOptionPKCS7Padding & kCCModeCBC,
                   vkey,
                   kCCKeySize3DES,
                   vinitVec,
                   vplainText,
                   plainTextBufferSize,
                   (void *)bufferPtr,
                   bufferPtrSize,
                   &movedBytes);

修复后

ccStatus = CCCrypt(kCCDecrypt,
                   kCCAlgorithm3DES,
                   kCCOptionPKCS7Padding,
                   vkey,
                   kCCKeySize3DES,
                   vinitVec,
                   vplainText,
                   plainTextBufferSize,
                   (void *)bufferPtr,
                   bufferPtrSize,
                   &movedBytes);

我解决了这个问题,PCKS7Padding默认是CBC模式,无需在代码中添加& kCCModeCBC。

在代码中删除& kCCModeCBC后,我可以获得没有\ 0x1,\ 0x2 ......等的真实文本。

希望这可以帮助那些有同样问题的人。