标签: commoncrypto

创建依赖于CommonCrypto的Swift框架pod规范

我已经为一次性密码编写了一个小型库,我想通过CocoaPods使它可用,但我在pod规范验证中失败了.

- > OTPGenerator(1.0) - ERROR | [iOS]返回失败的退出代码.您可以使用--verbose更多信息. - 错误| .../OTPGenerator/OTPGenerator/HOTPGenerator.swift:19:8:错误:没有这样的模块'CommonCrypto'

在XCode中一切正常,示例项目编译无需额外配置.我CommonCrypto在项目中添加了虚拟框架,并使实际框架依赖于它.

有没有办法让pod规格可见?我尝试了多种方法,但我总是遇到同样的错误.

源代码可在此处获得:https://github.com/codewise/ios-otp-generators.

ios commoncrypto cocoapods swift2

6
推荐指数
0
解决办法
802
查看次数

使用 CommonCrypto 框架的 iOS 本地收据验证

简单的问题:是否有人设法使用CommonCrypto框架而不是执行本地收据验证OpenSSL如果是 - 是否有任何示例代码如何做到这一点?

那么,用框架替换OpenSSLApple 文档(https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html)中的所有相关内容CommonCrypto

一些看起来像解决方案的东西OSX存在于https://gist.github.com/sazameki/3026845但我想知道是否有类似的东西可用于iOS.

在此先感谢您提供任何类型的答案或建议。

iphone openssl ios commoncrypto receipt-validation

6
推荐指数
0
解决办法
481
查看次数

如何在Swift 2和3中将CommonCrypto用于PBKDF2

我正在尝试使用CommonCrypto在Swift 2中使用PBKDF2对密码进行哈希处理,因为它的高性能以及它是开源的

我已经设法使用模块映射在Swift中使用CommonCrypto,但是有人可以告诉我使用CommonCrypto在Swift 2中使用PBKDF2进行哈希处理的代码

commoncrypto swift2

6
推荐指数
3
解决办法
2427
查看次数

Kotlin Native (iOS),使用 CValuesRef 和 CCCrypt

我正在针对 iOS 的 Kotlin 多平台项目中研究 AES256 加密算法。

我检查了一些在纯 Kotlin 中实现这一点的现有库(例如krypto),但它们都不符合我对其余代码的要求(它们已经在 J​​VM 和 JS 中实现,因此无法更改) .

来自 iOS 背景,我决定使用CommonCrypto. 我从这里改编并移植了代码,但我坚持如何ULong通过引用传递CCCrypt函数并稍后检索其值。

我非常仔细地阅读了关于C InteropObjective-C Interop的 Kotlin 文档,但我找不到任何可以解释如何处理我的案例的示例。

特别是,我的问题是numBytesEncrypted变量(见下面的代码)。我需要通过引用CCCrypt函数来传递它,然后读取它的值以NSData使用正确的长度实例化结果。在 Objective-C/Swift 中,我会&在调用函数时为变量加上前缀。

但是,Kotlin 不支持&运算符。如果我从文档中理解正确,那么 Native 中的替换是CValueRef( docs ),所以我使用cValue速记来获取正确类型的引用(应该是size_t,又名。ULong)。

我试图以CValueRef两种方式实例化,就类型检查而言,这两种方式似乎都有效:

val numBytesEncrypted = cValue<ULongVar>()
// or
val numBytesEncrypted = cValue<ULongVarOf<size_t>>()
Run Code Online (Sandbox Code Playgroud)

然后我使用这段代码来获取函数执行后的值: …

ios commoncrypto kotlin kotlin-native

6
推荐指数
1
解决办法
90
查看次数

用通用加密替换 OpenSSL 依赖?(Mac App Store 收据验证)

我的理解是,在 OSX 10.7 中不推荐使用 OpenSSL 以支持 Common Crypto,但我似乎无法很好地处理如何从 OpenSSL 代码转换到 Common Crypto 代码。特别是,我正在查看带有 ValidateStoreReceipt 的 App Store 收据验证。我首先尝试找到一种方法来获取 PKCS#7 容器的内容,这似乎是 中的第一步dictionaryWithAppStoreReceipt,但我找不到任何有关如何执行此操作的文档。

是否可以重写此代码以便不依赖于 OpenSSL?如果是这样,如何?是否有我错过的文档或教程?

macos openssl objective-c osx-lion commoncrypto

5
推荐指数
1
解决办法
2137
查看次数

iOS5上的CCKeyDerivationPBKDF

我正在尝试在我的应用程序中编写密码加密功能,遵循本文.

我编写了一个运行该CCCalibratePBKDF函数并输出轮数的函数.

const uint32_t oneSecond = 1000;
uint rounds = CCCalibratePBKDF(kCCPBKDF2,
                               predictedPasswordLength,
                               predictedSaltLength,
                               kCCPRFHmacAlgSHA256,
                               kCCKeySizeAES128,
                               oneSecond);
Run Code Online (Sandbox Code Playgroud)

这很有效,但是当我尝试实现下一部分时,一切都会出错.

我可以开始编写CCKeyDerivationPBKDF函数调用,它会自动完成函数和所有参数.当我通过填充它所有参数也自动完成.

- (NSData *)authenticationDataForPassword: (NSString *)password salt: (NSData *)salt rounds: (uint) rounds
{
    const NSString *plainData = @"Fuzzy Aliens";
    uint8_t key[kCCKeySizeAES128] = {0};
    int keyDerivationResult = CCKeyDerivationPBKDF(kCCPBKDF2,
                                                   [password UTF8String],
                                                   [password lengthOfBytesUsingEncoding: NSUTF8StringEncoding],
                                                   [salt bytes],
                                                   [salt length],
                                                   kCCPRFHmacAlgSHA256,
                                                   rounds,
                                                   key,
                                                   kCCKeySizeAES128);
    if (keyDerivationResult == kCCParamError) {
        //you shouldn't get here with the parameters as above
        return nil;
    } …
Run Code Online (Sandbox Code Playgroud)

security iphone objective-c ios commoncrypto

5
推荐指数
1
解决办法
2846
查看次数

使用 CCCrypt 解密返回 kCCSuccess 缓冲区长度错误

我有一个加密的数据流(AES 128、CBC、PKCS7),我正在尝试在它到达时对其进行解密。有时我会得到一个长度为 334 的数据包,然后我尝试对其进行解密。当我在 iPhone 5 上执行此操作时,它会返回kCCBufferTooSmall(预计非 mod 16 数据)。然而,当我在 iPhone 3GS 上有同样的东西时,它会返回kCCSuccess并给我一个部分解密的流(它给我的 333 的最后十个字节左右是假的 - 空终止符和随机数据)。

两台设备都是 iOS 6.1.2。该应用程序是使用设置为最新 SDK (6.1) 的基本 SDK 构建的,部署目标为 iOS 5.0。

我创建了以下测试用例,它也出现了这个问题:

+ (void)decryptionTest {
    NSData *data = [NSMutableData dataWithLength:334]; // 334 % 16 = 14
    NSData *key = [NSMutableData dataWithLength:kCCKeySizeAES128];
    NSData *iv = [NSMutableData dataWithLength:kCCBlockSizeAES128];
    size_t outLength = 0;
    NSMutableData *cipherData = [NSMutableData dataWithLength:data.length];

    CCCryptorStatus result = CCCrypt(kCCDecrypt,
                                     kCCAlgorithmAES128,
                                     kCCOptionPKCS7Padding,
                                     key.bytes,
                                     key.length,
                                     iv.bytes,
                                     data.bytes,
                                     data.length,
                                     cipherData.mutableBytes,
                                     cipherData.length,
                                     &outLength);

    NSLog(@"result …
Run Code Online (Sandbox Code Playgroud)

encryption ios commoncrypto

5
推荐指数
0
解决办法
1306
查看次数

相当于ios的spongycastle加密

这让我很难过 - 以下代码使用SpongyCastle的Android加密/解密 - 我正在尝试为iOS实现跨平台加密/解密.

下面的代码(来自Android)使用PKCS7Padding处理AES 128bit CBC,使用提供的salt和密码,salt存储在mysql数据库中,密码由最终用户提供,以下代码改编自此kelhoer回答.

我之所以使用AES128bit是因为AES256在iOS 4+中不可用,它是在iOS5 +中引入的,并且不得不使用脚趾openssl来生成派生密钥和初始化矢量(iv),因为学到苹果公司拒绝它是很冒险的与openssl库静态链接的应用程序.

由于该平台基于iOS 4.2+,因此使用捆绑和静态链接openssl库似乎过度杀死并且最好使用CommonCryptor库.

这是使用Spongycastle代码的Android版本:

private static void encrypt(InputStream fin, 
    OutputStream fout, 
    String password, 
    byte[] bSalt) {
    try {
        PKCS12ParametersGenerator pGen = new PKCS12ParametersGenerator(
            new SHA256Digest()
            );
        char[] passwordChars = password.toCharArray();
        final byte[] pkcs12PasswordBytes = 
            PBEParametersGenerator.PKCS12PasswordToBytes(passwordChars);
        pGen.init(pkcs12PasswordBytes, bSalt, ITERATIONS);
        CBCBlockCipher aesCBC = new CBCBlockCipher(new AESEngine());
        ParametersWithIV aesCBCParams = 
            (ParametersWithIV) pGen.generateDerivedParameters(128, 128);
        aesCBC.init(true, aesCBCParams);
        PaddedBufferedBlockCipher aesCipher = 
            new PaddedBufferedBlockCipher(aesCBC, new PKCS7Padding());
        aesCipher.init(true, aesCBCParams);
        byte[] buf = …
Run Code Online (Sandbox Code Playgroud)

android ios commoncrypto spongycastle

5
推荐指数
1
解决办法
1554
查看次数

如何使用swift 3在iOS上散列文件?

我有许多文件将存在于服务器上.用户可以在设备上创建这些类型的文件(plist),然后将其上传到所述服务器(CloudKit).我想通过内容使它们独一无二(唯一的方法应该适应创建日期的变化).我的理解是我应该散列这些文件以获取它们的唯一文件名.我的问题是:

  1. 我的理解是正确的,我想要的是哈希函数吗?
  2. 我应该使用哪种功能(来自CommonCrypto).
  3. 我需要的是摘要?
  4. 我将如何在代码中进行操作?(我假设这应该在NSData实例上进行哈希处理?).我从谷歌搜索的理解是,我需要一个桥接头,但除此之外,使用CommonCrypto困扰我.如果使用第一方API(Apple)有一种更简单的方法,我很满意(我希望尽可能避免使用第三方代码).

非常感谢!

hash ios commoncrypto swift

5
推荐指数
2
解决办法
3112
查看次数

CommonCrypto如何在SWIFT3中使用?

指导是在桥接头中使用#import"CommonCrypto/CommonCrypto.h".这是来自于swift中的SHA256的问题.
但是,当我使用Andi和Graham给出的答案时,Xcode仍抱怨"使用未解析的标识符CC_SHA256_DIGEST_LENGTH ......"

我在想我犯了两个错误之一:(a)我遗漏了没有连接标题并正确导入的东西.即我没有正确设置桥接头.我想知道如何包含库并正确创建桥接头的明确步骤.或者(b)默认情况下不包含库,我实际上需要先下载它并在本地存储才能使用它.我喜欢这方面的指示.

谢谢.

commoncrypto swift

5
推荐指数
1
解决办法
2348
查看次数