问题标签 [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 回答
2510 浏览

ios - 如何使用openssl解密使用CCCrypt在Objective-C中创建的文件?

我有一个 iOS 移动应用程序,它加密数据并将其存储在应用程序沙箱中的文件中。文件使用 CCCrypt() 加密如下:

密钥长 256 位,IV 长 128 位。我不是加密专家,但这应该使用 CBC 模式(CCCrypt() 的默认值),据我了解,此处指定的 PKCS#7 填充选项等同于 openssl 的 PKCS#5 填充。

数据写入文件如下:

我尝试使用 openssl 解密文件,如下所示(密钥和 iv 替换为 0):

两者都返回相同的错误:

错误解密 28969:错误:06065064:数字信封例程:EVP_DecryptFinal_ex:错误解密:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/evp/evp_enc.c:330:

我还尝试了其他模式和其他选项,例如 -nosalt 和 -a。没有人返回明文。

我花了几个小时试图找到一个如何在网上任何地方执行此操作的示例,但没有任何东西可以帮助我解决问题。帮助将不胜感激。

==========

答:CCCrypt 中的密钥是一个 32 字符的字符串,它被转换为 256 位。openssl 预期的密钥是来自该字符串二进制表示的 64 个十六进制数字。同样,CCCrypt 中的 iv 是一个 16 字符的字符串,它被转换为 128 位。openssl 期望的 iv 是该字符串的十六进制表示。一旦我使用了这两者的十六进制表示,它就很容易解密。

0 投票
1 回答
1598 浏览

ios - 如何在 iOS 上评估 x509 证书的信任度

我目前正在开发一个具有端到端加密的 iOS 应用程序。为了让用户相互验证,每个用户都会生成一个 x509 证书签名请求 (CSR) 并将 CSR 发送到我们的 CA 服务器进行签名。

用户可以通过验证其他用户证书是否由 CA 签署来信任其他用户。

我的问题是:

在 iPhone 上,我目前有需要验证的 CA 证书和用户证书。如何验证用户证书实际上是由 CA 签署的?

我最好的尝试是下面的代码,但它没有指定评估 clientCert 的对象,这让我感到困惑。

0 投票
11 回答
34245 浏览

macos - Swift 中的 CommonHMAC

我正在尝试在 Swift 中创建字符串的 HMAC SHA-1 哈希,但无法弄清楚如何与 API 交互,因为它似乎没有导入 CommonCrypto 框架。我尝试了各种不同形式的“import CommonCrypto”并创建了一个桥接头文件,但都没有任何区别。

奇怪的是,如果我创建了一个 Objective-C 类,我可以毫无问题地与 API 交互,所以这似乎是 Swift 独有的。

另外,如果有人能告诉我uint8_t digest[CC_SHA1_DIGEST_LENGTH]Swift 中的等价物,我将不胜感激

0 投票
1 回答
1025 浏览

ios - 使用带有 IV 但总是返回 nil 的 CommonCrypto

我正在使用 CommonCrypto CCCryptorCreate 来解密消息。我正在使用密码和 IV,但它总是返回 nil。

如果我使用 CCCryptorCreate 进行解密,但在 RUBY 端加密期间不使用 IV 并且不在 obj-c 解密端使用 IV,则解密工作完美,我可以看到消息。

但是,如果我在 RUBY 上使用 IV 并在 obj-c 端使用 IV,则解密以 nil 消息对象结束。

在Objective-C中使用这个加密/在Ruby中使用任何东西解密

OBJ-C方法:

0 投票
16 回答
108638 浏览

ios - 在 Swift 框架中导入 CommonCrypto

如何CommonCrypto在 iOS 的 Swift 框架中导入?

我了解如何CommonCrypto在 Swift 应用程序中使用:您添加#import <CommonCrypto/CommonCrypto.h>到桥接头。但是,Swift 框架不支持桥接头。文档说:

您可以导入具有纯 Objective-C 代码库、纯 Swift 代码库或混合语言代码库的外部框架。无论框架是用一种语言编写的还是包含来自两种语言的文件,导入外部框架的过程都是相同的。导入外部框架时,请确保将要导入的框架的“定义模块”构建设置设置为“是”。

您可以使用以下语法将框架导入到不同目标中的任何 Swift 文件中:

不幸的是,导入CommonCrypto不起作用。也不会添加#import <CommonCrypto/CommonCrypto.h>到伞形标题中。

0 投票
1 回答
172 浏览

ios - 如何从可执行文件中提取 NSString 值

我正在使用 CommonCrypto 库为 iPhone 应用程序加密数据。数据是应用程序本地的。加密密钥使用 NSString 硬编码在代码中。

我想知道是否有办法从应用程序可执行文件中访问这个 NSString 的值。我知道代码将是可执行形式,但最后一个 NSString 必须将该值以纯文本形式存储在应用程序的某处。例如,使用 iExplorer 访问应用程序文件夹将提供对可执行文件的完全访问权限。

0 投票
1 回答
254 浏览

objective-c - 如何将基于 OpenSSL 的 DES 解密方法移植到 CommonCrypto?

我有以下方法,我想将其移植到基于 CommonCrypto 的方法,但我完全卡住了。非常感谢任何帮助。

我已经找到了 CommonCrypto 函数

但我不确定如何将我在原始方法中派生的 OpenSSL 参数移植到CCCrypt(...).

0 投票
3 回答
1042 浏览

ios - 通用加密——在解密中测试坏密钥?

我编写了使用 iOS 的 Common Crypto 加密和解密NSData对象的代码。加密密钥为 AES128,存储在 iOS 钥匙串中。我可以成功地加密和解密数据,所以我知道那部分代码正在工作。然而,作为健全性检查,我还生成了第二个AES128 密钥并尝试解密使用第一个加密密钥加密的数据。我期望该CCCryptorStatus值不是kCCSuccess,但事实并非如此。我收到了一个NSData对象,没有错误。我的加密/解密代码看起来像这样......

当我调用加密和解密方法时,我将kCCAlgorithmAES128作为我的算法和kCCOptionPKCS7Padding我的选项传入。有没有办法在使用错误密钥进行解密时捕获,以便我可以返回适当的错误?

0 投票
2 回答
874 浏览

commoncrypto - 如何在 node.js 中加密并使用 RNCryptor 解密

我在使用节点加密数据和使用 RNCryptor 解密时遇到问题。我的理解是 RNCryptor 使用了特殊的数据格式?

密文生成如下:

我正在像这样解密:

我该怎么做?当我当前尝试解密时,我得到一个空的 NSData 并且没有错误。

0 投票
2 回答
6795 浏览

swift - Swift:如何从 Swift 调用 CCKeyDerivationPBKDF

我正在尝试从 Swift 调用 CCKeyDerivationPBKDF。

我已经在我的 Project-Bridging-Header.h 中导入了所需的标头:

(顺便说一句,在我的项目中导入其他 Objective C 代码时,桥接头似乎可以正常工作)。

在 Xcode 中,我可以从 .swift 文件跳转到此处显示的定义:

最后,当我尝试像这样调用函数时:

...我得到这个编译器错误:

无法使用类型为“(CCPBKDFAlgorithm,UnsafePointer,size_t,UnsafePointer,size_t,CCPseudoRandomAlgorithm,uint,UnsafeMutablePointer,size_t)”的参数列表调用“init”

我相信所有的转换都是正确的(实际上编译器错误帮助我识别每个参数的每个问题)——这让我认为编译器理解我调用 CCKeyDerivationPBKDF 的意图。

然而,在所有其他转换错误消失之后,编译器感到困惑,并认为我正在尝试使用初始化器构造一个类。

希望有人能告诉我我的方式的错误。

(Xcode 6 测试版 7)

根据要求,上下文中的完整代码: