首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ios 3des加密中包含大量的空termination.when --我将NSData转换为NSString,它是否能满足第一次空终止?

在ios 3des加密中包含大量的空termination.when --我将NSData转换为NSString,它是否能满足第一次空终止?
EN

Stack Overflow用户
提问于 2012-12-05 06:31:26
回答 1查看 485关注 0票数 1

我已经将这个函数用于3des加密。

代码语言:javascript
复制
 ccStatus = CCCrypt(kCCEncrypt,              // CCoperation op
                       kCCAlgorithm3DES,        // CCAlgorithm alg
                       kCCOptionPKCS7Padding,  // kCCOptionPKCS7Padding,                    //kCCModeECB,              // CCOptions
                       [_keyData bytes],        // const void *key
                       kCCKeySize3DES,          // 3DES key size length 24 bit
                       vinitVec,              //iv,                      // const void *iv,
                       [dTextIn bytes],         // const void *dataIn 
                       [dTextIn length],        // size_t dataInLength
                       bufferPtr,               // void *dataOut
                       bufferPtrSize,           // size_t dataOutAvailable
                       &movedBytes);            // size_t *dataOutMoved
       NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];'

虽然它起作用了。但是,当我将这个NSData转换为NSString时,由于NSString包含大量空终止,NSString在第一个null终止时,变量不能包含整个数据。但我必须在服务器上发送加密的字符串。如何将NSData转换为NSString?包含所有数据的字符串(如果数据包含空终止)。字符串不会在这种情况下结束)?

请提前帮忙谢谢。

谢谢您的回复,看看加密的字节是否包含

代码语言:javascript
复制
 char bytes[] = { 'H', 'e', 'l', 'l', 'o', \0, 'W', 'o', 'r', 'l', 'd', \0 };
   NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
   NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
   NSLog(@"%@", str);

   NSString *sendtoserver=[NSString stringwithformat:@"<request>%@</request>",str];

当我们将这些NSData转换为NSString时。它将在第一个\0 ( null终止)结束,因为我们必须发送加密的NSString.so,这造成了问题。我无法发送base64string,因为服务器端不希望that.they请求加密字符串。

所以我现在要做的是,再次感谢您的回复,先生,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 20:54:09

NSData转换为NSString并不会以空字节停止。NSString可以包含任意Unicode字符,包括嵌入的"NULL“字符。

示例:

代码语言:javascript
复制
char bytes[] = { 'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd', 0 };
NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@", str);

输出:

代码语言:javascript
复制
Hello

因此,看起来字符串只包含5个字符,转换在第一个空字节处停止。但这只是NSLog输出,实际上没有丢失什么:

代码语言:javascript
复制
for (int i = 0; i < [str length]; i++) {
    unichar c = [str characterAtIndex:i];
    NSLog(@"%2d, %3d, %c", i, c, c);
}

输出:

代码语言:javascript
复制
  0,  72, H
  1, 101, e
  2, 108, l
  3, 108, l
  4, 111, o
  5,   0, 
  6,  87, W
  7, 111, o
  8, 114, r
  9, 108, l
 10, 100, d
 11,   0, 

因此,字符串包含所有数据,没有丢失任何数据。当您将字符串发送到服务器时,该字符串可能稍后会被截断。

备注:将加密的数据转换为字符串对我来说是个问题,因为数据是用某种字符编码来解释的。在本例中,我选择了NSASCIIStringEncoding,但根据文档,这种编码只对…值0有效。127.

如果您添加了更多关于加密数据如何以及以何种格式发送到服务器的信息,我们可能会建议如何更好地解决这一问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13717571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档