unpad NSData来自ios上的解密

时间:2012-03-28 08:51:26

标签: ios nsdata

我使用IOS解密一个字符串,但是HEX输出比实际字符串略长 它在字符串末尾有一些00,当我使用NSData时会产生问题。

是否可以删除00生成的?

在我看到十六进制之后,我的数据试图删除它们,并且似乎可以使用

[dirtyData setLength:[dirtyData length] - 3]

但idk如何以编程方式计算有多少00有广告结尾

我相信我需要像php函数那样思考但与NSData hex兼容

function unpad($text){
       $pad = ord($text{strlen($text)-1});
       if ($pad > strlen($text)) return false;
       if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;

       return substr($text, 0, -1 * $pad);
   }

1 个答案:

答案 0 :(得分:-1)

如果您存储了未填充数据的长度(在您的示例3中),那么您可以使用:

NSUInteger unpaddedLen = [dirtyData length] - 3;
NSRange unpaddedRange = NSMakeRange(0, unpaddedLen);
NSData* unpaddedData = [dirtyData subdataWithRange:unpaddedRange];

注意:NSData是不可变的,这就是你的setLength不起作用的原因。另一种方法是使用NSMutableData

NSMutableData* dirtyData;
// fill dirtyData as just it would be NSData
[dirtyData setLength:[dirtyData length] - 3]; // will now work