如何在iOS中使用Openssl工具解密使用AES128加密的数据

2024-01-07

我有很多代码片段,它们使用 AES128 加密数据(如果您提供工作实现,我将非常感激)例如这个:

- (NSData*)AES128EncryptWithKey:(NSString*)key {
    // 'key' should be 16 bytes for AES128, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES128 + 1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [self length];

    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);

    size_t numBytesEncrypted    = 0;

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionECBMode + kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES128,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesEncrypted);

    if (cryptStatus == kCCSuccess)
    {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }

    free(buffer); //free the buffer;
    return nil;
}

之后数据经过base64编码,我使用在线工具将其保存到data.bin

我想做的就是用 OpenSSl 解密这些数据。 但是,当我打电话时

openssl enc -aes-128-ecb -in data.bin -out out.bin -d -pass pass:0123456789123456

它告诉我坏幻数

如果我使用

openssl enc -aes-128-ecb -in data.bin -out out.bin -d -pass pass:0123456789123456 -nosalt

它告诉我解密错误

请帮忙。


这里有几个问题。首先,您使用 CBC 模式进行加密(这是默认模式)CCCrypt)但以 ECB 模式解密。很少有理由使用 ECB 模式。

您正在使用字符串(我假设“0123456789123456”)作为加密key,不是password。这些是不同的事情。我不确定如何openssl将密码转换为密钥。我没有看到对此的解释enc(1)页。我假设它使用 PBKDF2,但不清楚(并且没有给出迭代次数)。您应该使用实际的密钥来传递-K选项。在这种情况下,您还需要显式传递 IV。您没有正确生成静脉注射或盐。你应该是,然后你应该将它们传递给 openssl。

要了解如何正确加密,请参阅使用 CommonCrypto 使用 AES 进行正确加密 http://robnapier.net/blog/aes-commoncrypto-564。一旦你有了正确加密的东西,你就应该有一个正确的密钥、一个盐和一个 IV。将这些全部交给enc, using aes-128-cbc(假设 128 位 AES),它应该可以工作。

EDIT

值得一提的是:如果双方使用相同的工具包,加密/解密就会容易得多。为了完成您想要做的事情,您确实必须了解 CCCrypt() 和 OpenSSL 的具体细节,这就是我讨论它们的原因。即使您发现“似乎有效”的东西,安全性也很容易在您没有意识到的情况下变得非常差。AES128EncryptWithKey:就是一个例子;它看起来不错并且“有效”,但它有几个安全问题。如果可能的话,我要么在两侧使用 OpenSSL,要么在两侧使用 CCCrypt。

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

如何在iOS中使用Openssl工具解密使用AES128加密的数据 的相关文章

  • 为什么在 init 方法中使用双括号,或者是 1 == (1)?

    评估某些含义时括号有什么作用 我在代码中遇到过这个问题 当检查某些内容并且他们使用 if some condition that returns 1 code 所以我的问题是 这是否正确 我认为它总是错误的 因为 1 不返回任何东西 编辑
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • NSUInteger 的奇怪行为 - 无法正确转换为浮动

    这是我的情况 这让我发疯 我有一个计数值为 517 的 NSMutableArray 我有一个双精度值 它是我的乘数 double multiplier 0 1223 double result myArray count multipli
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • 用户验证 Facebook 后未调用应用程序打开 Url 方法

    我已将 ios 应用程序中的 facebook 升级到 3 0 并使用提供的代码https developers facebook com docs howtos login with facebook using ios sdk http
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • UIView animateWithDuration:delay: 工作很奇怪

    我在使用 iPhone 动画块时遇到了一个奇怪的问题 这段代码 UIView animateWithDuration 2 delay 0 options 0 animations void controller setBackgroundC
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca

随机推荐

  • iPhone:ubercab 又名 (uber) 地图坐标

    谁能描述如何通过 MKMapView 在屏幕中心的位置获取其地图坐标 查看 Uber 应用程序 免费 它们有一个静态的图钉位于屏幕中间 您拖动地图但图钉仍保留在那里 屏幕中间是他们找到您的位置 非常非常快 向您显示您附近的地址 嘿嘿 我是
  • 临时反应组件中的样式组件

    我在反应中的临时包装器中使用样式组件时遇到两个问题 组件已渲染 但不使用背景颜色 ComponentWithAddedColors 不是有效的打字稿 不知道为什么 有谁可以帮忙解决这个问题吗 interface IProps id stri
  • Numpy 一次将数组与多个标量进行比较

    假设我有一个数组 a np array 1 2 3 我想将它与一些标量进行比较 这工作得很好 就像 a 2 False True False 有没有办法可以同时使用多个标量进行这样的比较 比较两个数组时的默认行为是进行元素比较 但我希望一个
  • Django如何访问抽象Base模型局部变量

    我将这个抽象基本模型定义如下 class ActivityAbstractBaseModel models Model POOR PR FAIR FA MEDIOCRE ME GOOD ENOUGH GE GOOD GO VERY GOOD
  • ODBC 不断提示输入密码

    我有一个在 Access 2003 中构建的应用程序 它使用系统 DSN ODBC 连接到 SQL Server ODBC 使用 SQL 身份验证 当应用程序启动时 系统会提示用户在数据库中进行身份验证 我在同一域中设置了另一台计算机 并安
  • 在 Hive 中获取系统日期 -1

    有什么办法可以得到current date 1在 Hive 中的意思是yesterdays date总是 并且以这种格式 20120805 我可以像这样运行查询来获取数据yesterday s date就像今天一样Aug 6th selec
  • 防止xss攻击的更好方法

    这两种方法中哪一种是更好的防止 xss 攻击的方法 保存在数据库中时的 HTMLEntities 显示 回显时的 HTMLEntities 我发现第一个更好 因为您可能会在显示时忘记添加它 两者中哪一个是更好的防止xss攻击的方法 保存在数
  • 将 Spark 数据加载到 Mongo / Memcached 中以供 Web 服务使用

    我对 Spark 非常陌生 并且有一个特定的工作流程相关问题 虽然它并不是真正与编码相关的问题 但它更像是与 Spark 功能相关的问题 我认为它在这里是合适的 如果您认为这个问题不适合 请随时将我重定向到正确的网站 所以这里是 1 我计划
  • 在没有管理员权限的情况下安装 MSBuild 15(Microsoft 构建工具)?

    有没有办法在没有管理员权限的情况下在我的计算机上本地安装 MSBuild 15 微软安装程序开启https www visualstudio com downloads https www visualstudio com download
  • 我怎样才能获得正确的付款期限?

    我觉得这更像是数学问题 我公司的员工遍布全国各地 公司的某些部门采用 奇数 工资周期 而另一些部门则采用 偶数 工资周期 我将给定支付期的开始日期称为 支付期 我需要做两件事 1 确定给定日期所属的发薪期 Something like th
  • 了解简单 C 程序生成的汇编代码

    我试图通过使用 gdb 的反汇编程序检查简单 C 程序的汇编级代码 以下是C代码 include
  • 如何为 Dagger2 提供 GoogleApiClient 依赖项?

    我已经开始使用 Dagger2 来管理依赖项 并且我试图了解如何使用 DI 来提供单例 GoogleApiClient 这样做的动机是 减少样板代码 多个 Activity 和 Fragments 需要 GoogleApiClient 提高
  • Vuejs - 无法读取未定义的属性“_withTask”

    我试图在按下按钮后将新的 html 添加到我的 div 中 使用v for 但是在我按下按钮后 我收到此错误 并且元素 文章 被添加到 div 一次 但之后它就不再起作用了 vue js 3de6 1743 TypeError 无法读取未定
  • Visual Studio 2015 RC - 无法添加虚拟目录

    我最近升级了我的机器 这意味着我必须安装 VS 2015 RC 社区 打开以前的项目 必须重新创建以前的所有虚拟目录 才发现当我尝试时收到以下错误消息 操作无法完成 只需选择 添加虚拟目录 时 输入名称和路径 然后按 Enter 键 还有其
  • Tensorflow Dataset API 在完成一个 epoch 后恢复迭代器

    我有 190 个特征和标签 我的批量大小是 20 但经过 9 次迭代tf reshape正在返回异常reshape 的输入是一个有 21 个值的张量 但请求的形状有 60 个我知道这是因为Iterator get next 如何恢复我的迭代
  • 如何使用 pandas 将列中的每个 NaN 替换为不同的随机值?

    我最近一直在玩 pandas 现在我尝试用不同的正态分布随机值替换数据框中的 NaN 值 假设我有这个没有标题的 CSV 文件 0 0 343 1 483 2 101 3 NaN 4 NaN 5 NaN 我的预期结果应该是这样的 0 0 3
  • 文本在*内*边界框内对齐

    文本框的对齐方式可以通过horizontalalignment ha and verticalalignment va 参数 例如 import matplotlib pyplot as plt fig ax plt subplots fi
  • GitLab Pipeline 无法连接到 Kubernetes

    当我执行视频显示的管道作业时 它失败并给出一条消息 错误 准备失败 连接到 Kubernetes 时出错 配置无效 未提供配置 这是故意的吗 我错过了任何配置吗 kubernetes 是为我的跑步者和我正在处理的项目配置的 但我没有看到任何
  • 使用只有很棒的字体的标记图标,没有周围的气球

    我的代码运行良好 但我只需要显示要显示的图标 而不是带有阴影的 气球 我尝试过删除 markerColor 但这只是更改为默认的蓝色标记 气球 如何只显示图标及其大小和颜色 pointToLayer function feature lat
  • 如何在iOS中使用Openssl工具解密使用AES128加密的数据

    我有很多代码片段 它们使用 AES128 加密数据 如果您提供工作实现 我将非常感激 例如这个 NSData AES128EncryptWithKey NSString key key should be 16 bytes for AES1