标签: commoncrypto

iOS 4中是否提供CC_MD5()和CC_SHA1()?

我希望在iOS 4及更高版本的iOS应用程序中使用MD5或SHA-1.我使用CommonCrypto/CommonDigest.h中的CC_MD5()和CC_SHA1()函数.它似乎在运行iOS 4.1和iPhone 4.0模拟器的iPhone上运行良好,但我很担心,因为XCode 4.2附带的iOS 5 SDK中的函数声明如下:

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);

extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);
Run Code Online (Sandbox Code Playgroud)

这似乎表明这些功能仅适用于iOS 5及更高版本.

这些功能是否允许在iOS 4应用程序中使用,如果是这样,是否有任何官方参考来记录这一事实?

ios4 ios commoncrypto

9
推荐指数
1
解决办法
2353
查看次数

Xcode 7.3 beta 1与Swift中的CommonCrypto

我在Swift框架中使用CommonCrypto - 它已经运行了一年多了.

我使用了这里找到的解决方案:在Swift框架中导入CommonCrypto

具体来说,为了从Swift框架引用CommonCrypto,我不得不:

module.mapCommonCrypto我的框架的Xcode项目旁边的文件夹中创建一个文件.module.map内容:

module CommonCrypto [system]
{
    header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/CommonCrypto/CommonCrypto.h"
    link "CommonCrypto"
    export *
}
Run Code Online (Sandbox Code Playgroud)
  • 在我的框架项目的Swift导入路径中,我添加了 CommonCrypto
  • 在我的框架项目的图书馆搜索路径中,我包括: $(SDKROOT)/usr/lib/system
  • 在我的来源中,我包括: import CommonCrypto

这很好用; 有点复杂 - 但它奏效了.

但是,在Xcode 7.3 beta 1(7D111g)中,此技术不再有效.

它似乎libcommonCrypto.tbd已从$(SDKROOT)/usr/lib/systemXcode-beta.app中删除:我无法在iPhoneOS SDK文件夹结构下找到它.

所以我得到这些错误:

ld:警告:找不到选项'-L/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/usr/lib/system'ld的目录:ld:library找不到架构arm64 clang的-lCommonCrypto:错误:链接器命令失败,退出代码为1(使用-v查看调用)

如果疯狂的模块地图业务被更简单的东西取代,那将是很棒的.比如说,只是使用import CommonCrypto

在任何情况下,我不知道如何解决这个问题,所以任何帮助都表示赞赏.

如果解决方案与上一个问题中找到的解决方案大不相同,我在这里要求提出一个新问题,尽管我很欣赏这可能不合适.

frameworks commoncrypto xcode7 swift2

9
推荐指数
1
解决办法
1137
查看次数

在iOS上签名的数据无法在Java中验证

我有一些数据,我正在SecKeyRawSign使用Elliptic Curve私钥在iOS上签名.但是,使用Signature.verify()返回验证Java中的数据false

数据是一个随机的64位整数,像这样分成字节

uint64_t nonce = (some 64 bit integer)
NSData *nonceData = [NSData dataWithBytes: &nonce length: sizeof(nonce)];
Run Code Online (Sandbox Code Playgroud)

根据该数据,我正在创建一个SHA256摘要

int digestLength = CC_SHA256_DIGEST_LENGTH;
uint8_t *digest = malloc(digestLength);
CC_SHA256(nonceData.bytes, (CC_LONG)nonceData.length, digest);
NSData *digestData = [NSData dataWithBytes:digest length:digestLength];
Run Code Online (Sandbox Code Playgroud)

然后使用私钥对其进行签名

size_t signedBufferSize = kMaxCipherBufferSize;
uint8_t *signedBuffer = malloc(kMaxCipherBufferSize);

OSStatus status = SecKeyRawSign(privateKeyRef,
                                kSecPaddingPKCS1SHA256,
                                (const uint8_t *)digestData.bytes,
                                digestData.length,
                                &signedBuffer[0],
                                &signedBufferSize);

NSData *signedData = nil;
if (status == errSecSuccess) {
    signedData = [NSData dataWithBytes:signedBuffer length:signedBufferSize];
}
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好.

然后,在Java服务器中,我正在尝试验证签名数据

PublicKey publicKey …
Run Code Online (Sandbox Code Playgroud)

java objective-c ios commoncrypto java-security

9
推荐指数
1
解决办法
508
查看次数

即使没有IV,CCCrypt在AES CBC中解密也能正常工作

我有一个令人困惑的问题,解密使用CCCrypt的AES-CBC模式加密的文件和随机的16字节IV产生完全相同的输出,无论我传入相同的正确IV用于加密还是根本没有.

我的期望:使用NULL IV进行解密不应导致正确的解密.我观察到:使用NULL IV会产生与用于加密的IV相同的结果.

下面为了完整起见,这里是重要的代码片段,iv以16字节安全随机化的NSData传递.

我在这里不理解什么?CCCrypt是否以某种方式从加密数据中找出IV本身?我在文档中找不到任何相关内容.

- (NSData *)encryptedDataForData:(NSData *)rawData
                         withKey:(NSData *)key
                              iv:(NSData *)iv
                           error:(NSError __autoreleasing**)error
{
    size_t outLength;
    NSMutableData *cipherData = [NSMutableData dataWithLength:rawData.length + kAlgorithmBlockSize];

    CCCryptorStatus result = CCCrypt(kCCEncrypt,
                                     kCCAlgorithmAES128,
                                     kCCOptionPKCS7Padding | kCCModeCBC,
                                     key.bytes,
                                     key.length,
                                     iv.bytes,
                                     rawData.bytes,
                                     rawData.length,
                                     cipherData.mutableBytes,
                                     cipherData.length,
                                     &outLength);
    if (result == kCCSuccess) {
        cipherData.length = outLength;
        return cipherData;
    } else {
        return nil;
    }
}

- (NSData *)decryptedDataForData:(NSData *)encryptedData withKey:(NSData *)key error:(NSError __autoreleasing**)error
{
    size_t outLength;
    NSMutableData *decryptedData = [NSMutableData dataWithLength:encryptedData.length];

    // this line …
Run Code Online (Sandbox Code Playgroud)

cryptography objective-c commoncrypto

8
推荐指数
2
解决办法
1万
查看次数

Swift计算大文件的MD5校验和

我正在为大型视频文件创建MD5校验和.我目前正在使用代码:

extension NSData {
func MD5() -> NSString {
    let digestLength = Int(CC_MD5_DIGEST_LENGTH)
    let md5Buffer = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLength)

    CC_MD5(bytes, CC_LONG(length), md5Buffer)
    let output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH * 2))
    for i in 0..<digestLength {
        output.appendFormat("%02x", md5Buffer[i])
    }

    return NSString(format: output)
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会产生一个内存缓冲区,对于大型视频文件来说并不理想.在Swift中有没有办法计算读取文件流的MD5校验和,因此内存占用量最小?

checksum md5 ios commoncrypto swift

8
推荐指数
2
解决办法
4980
查看次数

iOS CommonCrypto参考

我试图为Apple的CommonCrypto库找到某种参考,因为显然Apple没有任何明显的链接,谷歌给出的那些已经过时了,如下所示:

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/Common%20Crypto.3cc.html

有什么暗示吗?是否有更好的库可用于开发具有大量加密功能的应用程序?

谢谢.

documentation cryptography ios commoncrypto

6
推荐指数
2
解决办法
8512
查看次数

创建依赖于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
查看次数