问题标签 [commoncrypto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
632 浏览

ios - 在 Swift 中使用 CommonCrypto 会产生不安全的扩展警告

我创建了一个简单的库来使用名为SweetHMAC的 Swift 的 HMAC 摘要。这个库非常简单,基本上是 Swift 中 CommonHMAC.h 的包装器。

我可以使用 SweetHMAC 正确构建和部署任何 iOS 项目,但是,由于一些安全问题,我的方法似乎不安全。例如,我在运行 iOS 测试后收到警告。

warning: linking against dylib not safe for use in application extensions

此代码不够安全,无法放入 iOS AppStore,应用程序可能会被拒绝。对于 OSX,没有问题。

我知道,Swift 有 HMAC 端口,但我的挑战是尝试让 Swift 安全地使用 CommonCrypto。

我已经使用这种方法实现了这个项目并且工作正常!

我的问题是,如何在 iOS 的 Swift 框架中安全地创建和使用 CommonCrypto 等模块?

0 投票
1 回答
75 浏览

ios - Commom Crypto 库是否支持以下密钥封装 RFC?

我尝试在我的应用程序中使用以下 RFC 算法: https ://www.rfc-editor.org/rfc/rfc5990

c# 和 java 的 Bouncy Castle 支持它,但我正在使用 iOS。据我所知,ios 中最好的密码学工具是commoncrypto库。所以问题是这个库是否支持它?

我没有找到有关文档的任何有用信息,希望这里有人可以提供帮助。

0 投票
2 回答
1175 浏览

python - 在 ios 中使用 ecc 进行加密

我正在尝试实施 ecc 技术进行加密。我浏览了以下帖子:

  1. 基于椭圆曲线 Diffie-Hellman 和 CommonCrypto 的共享密钥

  2. iOS 中的椭圆曲线加密

没有任何令人满意的解决方案。

现在,我正在考虑使用 python 库
https://github.com/yann2192/pyelliptic

但我不知道这是否是使用 ecc 进行加密的更好解决方案,因为我仍然需要找出一种在 objc 中使用 python 库的方法。

有人可以指出我正确的方向吗?

0 投票
1 回答
531 浏览

objective-c - 在 Objective C 中解密 AES

我是加密新手

问题:

我得到了一组加密字符串,我需要将它们解密以显示给移动客户端用户。对于android,它解密得很好,我正在使用以下方法“解密”。对于 iOS,我在将这个 java 方法转换为 Objective C 时遇到了很多麻烦。我尝试使用 NSData+CommonCrypto、RNCryptor。它们都会返回一些解密数据,但是当将解密数据转换为字符串时,它总是为零。

目标:

将java解密方法翻译成Objective C(使用密钥解密Objective C中的字符串)

任何建议、评论、意见、伪代码将不胜感激。谢谢

Android解密方法

0 投票
1 回答
797 浏览

php - 具有 PKCS7 填充编码数据的 AES 256 具有一半 ECB 和一半 CBC 块

我试图解码从服务器返回的 php 中的数据:我知道数据 AES 256 解码并有 PKCS7 填充但无法弄清楚它使用哪种块模式

这是我的php函数:

和编码数据示例

当我用 ECB (MCRYPT_MODE_ECB) 解码时,它只解码数据的开头,其余部分不可读

当使用 CBC (MCRYPT_MODE_CBC) 模式解码时,它开始无法读取

结果应该是(我在Mac上使用Objective-c中的CommonCryptor得到的):

有人知道出了什么问题或如何以正确的方式对其进行解码?

0 投票
1 回答
843 浏览

ios - SecKeyRawVerify 在 Mac 上验证但在 iOS 上失败并显示 -9809

我需要在 mac 上对一些数据进行数字签名,然后在 iOS 上进行验证。因此,我使用开放式 ssl 生成了 DER 格式的公钥的 RSA 密钥对和证书(尝试使用 SecKeyGeneratePair 生成,但是将公钥导入 iOS 并且 SecKeyRawVerify 仍然无法使用相同的结果),并签署了我的数据Mac 应用程序。然后,如果我在 iOS 验证上验证此数据失败并显示 -9809 错误代码,但如果在 mac 上执行相同的代码验证成功。

这是我的验证代码:

Mac 和 iOS 的数字签名验证有什么不同吗?我没有设法在 Apple 的文档中找到任何关于它的信息。

0 投票
2 回答
472 浏览

c - CryptoApi 到 CommonCrypto

我有在 Windows 平台中使用的加密代码,它使用 Crypto API 函数,需要将其转换为在 OS X 上使用 Common Crypto。

基本上原始代码是这样的,为简洁起见删除了错误检查:-

据我了解,这就是正在发生的事情:-

CryptAcquireContext - 获取一个对象来处理密码学

CryptCreateHash - 创建一个 MD5 散列对象

CryptHashData - 使用 MD5 散列输入数据

CryptDeriveKey, CryptDecrypt - 使用 RC4 解码 pData,使用密钥 m_hKey

pszInputData 的大小为 12 字节,MD5 散列对象的输出数组在两个平台上是相同的。

要使用 RC4 解码,我使用 Common Crypto 执行以下操作:-

使用在线 RC4 解码器匹配来自 Common Crypto 的输出(outBuffer 数组)测试,因此解码正确。

但是,pData 中 Windows 代码的最终输出与 Common Crypto 中解码的 RC4 不匹配。

此处的 Windows Crypto API 调用是否有一些我遗漏或不理解的步骤?为什么输出不同?

(请注意,我不是在寻找有关使用 RC4 的安全性或缺陷的评论)

0 投票
2 回答
5548 浏览

swift - MD5 3DES 加密 Swift

我有一个应用程序必须发送首先由 MD5 加密然后由 3DES 加密的登录凭据。

我设法使用 CryptoSwift 通过 MD5 加密字符串。但是我在 Swift 上找不到任何可以通过 3DES 加密的内容。

我已经尝试过 CommonCrypto。据我所知,这是在 C 中,但可以通过桥接头导入到 Objective C 中。

我找到了一些文章和教程,它们告诉我如何通过桥接头(带有警告它不适用于框架)或 Model.map 将 CommonCrypto 导入 Swift。但是,两者都不起作用。我不确定这是否是最新版本的 iOS 或 Xcode 的限制。

有人可以建议替代方案吗?

谢谢

已编辑

您好,请查看我已采取的以下步骤

  1. 好的,所以我创建了一个名为 newEncrypt 的新项目。
  2. 我选择不使用 header 选项,因为说明说这仅限于非框架应用程序/
  3. 我在 newEncrypt 中创建了一个名为 CommonCrypto 的文件夹,里面有一个 module.map 文件。其中的内容是:module CommonCrypto [system] { header "/usr/include/CommonCrypto/CommonCrypto.h" export * }
  4. 将 ${SRCROOT}/CommonCrypto 添加到快速编译器搜索路径导入路径。调试和发布。
  5. 这是指令停止的地方。我假设我需要将 CommonCrypto 导入我的班级。此错误与“无法构建目标 C 模块‘CommonCrypto’。我还假设我应该在“/usr/include/CommonCrypto/CommonCrypto.h”或“/newEncrypt/CommonCrypto/CommonCrypto.h”中有 CommonCrypto 库文件(来自 CommonCryto 'include' 文件夹)?我试过这个,但是我只是得到同样的错误。
  6. 然后,我尝试使用#import 添加一个头文件,并将 -lfoo 添加到其他链接器标志调试和发布(尽管这可能不是正确的)ust,以防仍然需要。但我仍然得到相同的无法构建目标 c 错误。我确定我做错了什么,这很明显
0 投票
3 回答
707 浏览

ios - AES128 在 iOS 7 上截断解密文本,在 iOS 8 上没有问题

使用 ECB 模式(这是玩具加密)和 PKCS7 填充使用 AES128 加密的密文,以下代码块导致在 iOS 8 下恢复完整的明文。

在 iOS 7 下运行相同的代码块会生成正确的明文,但会被截断。为什么是这样?

我在下面添加了一个带有结果的独立测试工具。

测试线束:

iOS 8 结果:

iOS 7 结果:

和随后的结果:


更新:谜语:当我改变时

kCCOptionPKCS7Padding | kCCOptionECBMode ⇒ kCCOptionECBMode

iOS 7 中的结果符合预期。为什么是这样??我知道字节数是块对齐的,因为密文是用 PKCS7 填充填充的,所以这是有道理的,但为什么设置kCCOptionPKCS7Padding | kCCOptionECBMode只导致 iOS 7 中的截断行为?


编辑:上面的测试密文是从这个网站生成的,并且在以下函数中独立使用 PHP 的 mcrypt 和手动 PKCS7 填充:

出去:

I9JIk5BskZMZKJFB/EAs+N2AYzkVR15DoBbUL7cBydBkWGlujVnzRHvBNvSVbcKh


更新:正确的 PKCS#7-padded 密文将是

I9JIk5BskZMZKJFB/EAs+N2AYzkVR15DoBbUL7cBydA6aE5a3JrRst9Gn3sb3heC

就是为什么不是。

0 投票
1 回答
275 浏览

openssl - SQCipher:OpenSSL 到 CommonCrypto

刚刚将最新版本的 sqlcipher 库安装到我的 iOS 项目中。所以我从 OpenSSL 切换到 CommonCrypto(sqlcipher iOS 教程也发生了变化)。

现在,我收到“数据库错误:26”文件已加密或不是数据库“。似乎使用 CommonCrypto 的新加密引擎无法识别我之前使用 OpenSSL 加密并在 2 种情况下使用 SQLCipher 加密的数据库文件。当然, db键是一样的...

合乎逻辑吗?我应该保留 OpenSSL 吗?