在ios 3des加密中包含很多空终止。当我将 NSData 转换为 NSString 时,它最终会出现第一个空终止吗?

2023-12-05

我已经使用这个函数进行 3des 加密。

 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 最终出现在第一个空终止符上,该变量无法包含整个数据。但我必须在服务器上发送加密的字符串。我该怎么做才能将 NSData 转换为 NSString。包含所有数据的字符串意味着(如果数据包含空终止。在这种情况下字符串将不会结束)?

请帮忙 提前致谢。


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

 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 处结束(空终止) 因为我们必须发送加密的 NSString.so 这会产生问题。我无法发送 base64 字符串,因为服务器端不希望这样。他们要求加密字符串。

所以我现在做什么,请帮忙 再次感谢先生的回复,


转换NSData to NSString does not停在空字节处。 ANSString可以包含任意 Unicode 字符,包括嵌入的“NULL”字符。

Example:

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);

Output:

Hello

So it looks就好像字符串只包含 5 个字符,并且转换在第一个空字节处停止。但这仅是NSLog输出,实际上什么都没有丢失:

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

Output:

  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, 

因此该字符串包含所有数据并且不会丢失任何内容。当您将其发送到服务器时,该字符串可能会被截断。


REMARK:将加密数据转换为字符串对我来说似乎有问题,因为数据以某种字符编码进行解释。我已经选择NSASCIIStringEncoding在此示例中,但根据文档,此编码仅对 ASCII 值 0…127 有效。

如果您添加有关如何以及以何种格式将加密数据发送到服务器的更多信息,我们也许能够提出如何更好地解决此问题的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在ios 3des加密中包含很多空终止。当我将 NSData 转换为 NSString 时,它最终会出现第一个空终止吗? 的相关文章

  • NSNumberFormatter 货币没有符号?

    我正在使用 NSNumberFormatter 从字符串中获取货币值 效果很好 我使用这段代码来执行此操作 NSNumberFormatter nf NSNumberFormatter alloc init nf setNumberStyl
  • 继续在后台运行iOS应用程序,从加速器收集数据并将其发送到服务器

    我开发了一个应用程序 用于读取加速器数据 将它们存储在本地并以特定的时间间隔频繁地将它们发送到服务器 该应用程序必须在后台运行 但一段时间后 有时 3 分钟 它会停止发送 就像关闭一样 是否可以使应用程序始终保持活动状态 在后台运行并将数据
  • MVC中如何对数据进行加密和解密?

    In my MVC应用我想要encrypt and decrypt数据从视图到控制器的数据传输 如何执行此操作MVC 4 using Razor 您不需要加密从控制器到视图的数据 因为视图渲染发生在控制器正在操作的同一台计算机中 如果您想加
  • iPhone在没有私人库的情况下获取SSID

    我有一个商业应用程序 它有完全合法的理由来查看它所连接的网络的 SSID 如果它连接到第 3 方硬件设备的 Adhoc 网络 它需要以不同的方式运行连接到互联网 我所看到的有关获取 SSID 的所有内容都告诉我 我必须使用 Apple802
  • 如何使用宏检测 iPhone 操作系统版本

    我想在我的应用程序中检测 iPhone 操作系统版本 我尝试过使用检测代码 但建议使用宏 有人有经验吗 你可以发布示例代码 以及使用什么库 我不确定建议您使用什么宏 我一直认为查找版本号以便与未来和以前的版本兼容的标准方法是使用 NSStr
  • 下载文件时如何更新 UICollectionViewCell 子类中的进度条

    我要疯了 我正在尝试更新进度条UICollectionViewCelll当我下载文件时 我已经尝试了一切 一切 这是我最后的尝试 我创建了一个子类UICollectionViewCell 与一个连接xib file import
  • 在 iPhone 模拟器中设置当前用户位置

    有没有办法在 Xcode 4 上的 iPhone 模拟器中设置当前用户位置 我希望模拟器显示除库比蒂诺之外的其他位置 是的 从模拟器的菜单中选择Debug gt Location gt Custom Location
  • jquery mobile 和 iphone - 页面底部的空白区域

    我有一个 jquery 移动网页 它在桌面浏览器和 Android 上看起来都不错 但在 iPhone 的 safari 中 我在页面底部有一个奇怪的空白 它看起来像是 ui 页面的最小高度的问题 因为空白区域与 safari 的标题栏 u
  • UIDatePicker 仅显示月份和日期

    我想要一个UIDatePicker用户可以选择月份和日期 但不能选择年份 我知道闰年有额外的一天 所以为了简单起见 让我们把这一天扔掉 有没有办法删除年份列或有 2 个带有月 日的卷轴 其作用类似于UIDatePicker 所选月份中不存在
  • iPhone SDK 3.0 和 symbolicatecrash 相处不好?

    更新 我已经重新安装了 Snow Leopard 全新安装 完全清除了我现有的 Leopard 安装 同样的问题仍然存在 我已经尝试了多个版本的 symbolicatecrash 来解析崩溃报告中的符号 从 Apple 提供的版本 到 Al
  • 如何在 iPhone 应用程序中运行进程而不阻塞用户界面

    我正在 iPhone 上访问照片库 需要很长时间才能导入我在应用程序中选择的图片 如何在辅助线程上运行该进程 或者我应该使用什么解决方案来不阻塞用户界面 我在这里使用 PerformSelectOnBackground 或 GCD 对示例代
  • 在 SQLite 中加密数据

    如何加密我的数据 就我研究的解决方案而言 有两种方法 使用android提供的算法加密数据 我使用android提供的 Cipher 来加密我的数据 但我在检索大量记录的数据时遇到问题 导致应用程序的性能显着降低 我对整个数据库进行了编码
  • 错误:Phonegap 中的白名单拒绝

    我是移动开发新手 我正在使用 Phonegap Cordova 创建跨平台应用程序 我的代码在 Android 上运行良好 但当我将其移植到 iPhone 时 它 显示错误 143 2003 ERROR whitelist rejectio
  • UITableView 滚动缓慢

    编辑 我在英语记录上做了相同的代码 滚动速度仍然像往常一样快 并且工作正常 但是当我获取阿拉伯语数据时 滚动又变慢了 这是阿拉伯数据的问题吗 我有大约 100 条记录 我的 tableview 滚动非常慢 谁能告诉我这段代码有什么问题 为什
  • NSString 到 Double 问题

    可能很简单 但我不明白 我有一个 NSString50 81114我想把它转换成双 目前我正在使用 string doubleValue 但这是作为50 811140000002这是怎么回事 Disco 由于精度有限double无法存储50
  • 手势问题:UISwipeGestureRecognizer + UISlider

    遇到与手势相关的问题 我实现了 UISwipeGestureRecognizer 来获取向左和向右滑动事件 并且工作正常 然而 我面临的问题是 我在同一视图中的 UISlider 玩得不好 滑块的滑动动作被误认为是向左 向右滑动 任何人以前
  • Xcode 4:删除构建设置中的项目

    在 XCode 4 0 中 有一个新设计的 构建设置 页面 我的问题是 一旦指定设置 我就看不到如何删除它 示例 我已将目标级别的 版本控制系统 更改为 Apple Generic 后来我意识到我应该在项目级别设置它 所以我想删除目标级别设
  • 为什么缓存清单在桌面上按预期工作时可能无法让移动 Safari 缓存站点?

    我正在本地玩一个简单的网络应用程序 但不太明白为什么它在 iPhone 上没有正确缓存 我正在服务一个 manifest文件具有正确的 MIME 类型 并且当我在桌面 Safari Chrome 和 Firefox 上打开或关闭本地服务器时
  • 以编程方式在 iPhone 上使用彩信发送图像?

    搜遍全网都没有解决这个问题 我想用 iPhone 相机拍照 然后能够通过彩信 电子邮件发送出去 这不一定发生在我的应用程序中 但至少我希望能够调用彩信 电子邮件应用程序并使其选择拍摄 和存储 的图片 当我使用内置相册应用程序时 每张照片的左
  • MKAnnotationView 的不同字体

    在iPhone SDK地图上的标注气泡上 可以更改标题和副标题属性的字体吗 我对标注气泡中显示的默认字体不满意 并且希望使用不同的字体来匹配我的应用程序的其余部分 然而 我没有看到太多提及这一点 这让我担心这可能是不可能的 我见过构建自定义

随机推荐