我刚刚想在Lion上使用libcrypto,但整个API似乎都已被弃用。自10.6.6以来,手册页面都没有更新。
有人知道Lion上替代libcrypto的是什么吗?
如果你知道你在做什么,只想消除这些警告,一种方法是添加
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
针对相关的头文件进行更改 - 在我的情况下是 /usr/include/openssl/crypto.h 和 /usr/include/openssl/md5.h。
libcrypto是OpenSSL的一部分,它并没有改变太多。它不会消失,但是苹果建议开发者使用他们的CDSA(通用数据安全架构)库,而不是直接使用OpenSSL。
好的,我在这里回答自己的问题。
10.7版本将Transforms引入了Security.framework中,它与SecKey紧密结合。Transforms可以让您做很多事情,包括编码(例如base64),摘要,签名/验证和加密。
以下是如何签署一些数据的示例。所有的转换都遵循相同的基本模式;如果您查看Security.framework的头文件,您会看到每种类型的变换的头文件。这些来自SecTransformReadTransform.h和 SecSignVerifyTransform.h。为了简单起见,我省略了任何错误检查或清理代码。
NSData *dataToBeSigned = ;// Get this from somewhere. We set sha1 attributes down below, so this should be a sha1 digest
SecKeyRef *key = ;// Get this from somewhere; keychain or SecItemImport
SecGroupTransformRef group = SecTransformCreateGroupTransform();
CFReadStreamRef readStream = NULL;
SecTransformRef readTransform = NULL;
SecTransformRef signingTransform = NULL;
// Setup our input stream as well as an input transform
readStream = CFReadStreamCreateWithBytesNoCopy(kCFAllocatorDefault,
[dataToBeSigned bytes],
[dataToBeSigned length],
kCFAllocatorNull); // Pass Null allocator so it doesn't free NSData's bytes
readTransform = SecTransformCreateReadTransformWithReadStream(readStream);
// Setup a signing transform
signingTransform = SecSignTransformCreate(key, NULL);
SecTransformSetAttribute(signingTransform, kSecInputIsDigest, kCFBooleanTrue, NULL);
SecTransformSetAttribute(signingTransform, kSecDigestTypeAttribute, kSecDigestSHA1, NULL);
// Connect read and signing transform; Have read pass its data to the signer
SecTransformConnectTransforms(readTransform, kSecTransformOutputAttributeName,
self.signingTransformRef, kSecTransformInputAttributeName,
group, NULL);
// Execute the sequence of transforms (group)
// The last one in the connected sequence is the return value
NSData *signature = SecTransformExecute(group, NULL);