Security Mac上公钥加密/解密的示例代码?
在哪里可以找到Mac OS X上公钥加密和解密的简单示例代码?苹果公司的《证书、密钥和信任服务编程指南》展示了如何在iOS上实现这一功能,我对此感到失望,但所需的API(Security Mac上公钥加密/解密的示例代码?,security,macos,openssl,Security,Macos,Openssl,在哪里可以找到Mac OS X上公钥加密和解密的简单示例代码?苹果公司的《证书、密钥和信任服务编程指南》展示了如何在iOS上实现这一功能,我对此感到失望,但所需的API(SecKeyEncrypt,SecKeyDecrypt)显然无法在Mac OS X上实现。在“CryptoSample”中可能有实现这一功能的方法,但它看起来并不清晰或简单,而且示例项目太旧,无法使用当前版本的Xcode打开。Mac OS X在libcrypto中包含OpenSSL。CommonCrypto框架似乎源自OpenS
SecKeyEncrypt
,SecKeyDecrypt
)显然无法在Mac OS X上实现。在“CryptoSample”中可能有实现这一功能的方法,但它看起来并不清晰或简单,而且示例项目太旧,无法使用当前版本的Xcode打开。Mac OS X在libcrypto中包含OpenSSL。CommonCrypto框架似乎源自OpenSSL的前身SSLeay。在Mac OS版本之间,安全框架API的变化相当频繁。最佳方法取决于您的目标版本:
SecEncryptTransformCreate
或SecDecryptTransformCreate
创建转换,使用SecTransformStatAttribute
设置其输入,并使用SecTransformExecute
执行转换CryptoSample
的cdsaEncrypt
就是一个简明的例子
您可以分别使用seckeyGetCsHandle
和SecKeyGetCSSMKey
从SecKeyRef获取CSSM\u句柄和cssmkey
要了解更多关于CDSA的信息,可以从Open Group获得完整规范(免费,但需要注册):
祝你好运
SecKeyEncrypt
和SecKeyDecrypt
,参数与iOS上相同。快速的“脏”解决方案是简单地声明和使用它们(弱链接,带有通常的警告)。在您计划分发给其他人的代码中执行此操作可能不是一个好主意在以下位置有一个使用公钥解密数据的实现:。 Security.framework没有用于此类功能的公共API,这就是为什么CSSM需要直接使用的原因,即使它被标记为已弃用。
要使用公钥进行加密,只需使用SecEncryptTransformCreate,但要进行公钥解密,您需要使用CSSMPublicKeyDecrypt类。我不怀疑Mac OS X有API可以做到这一点,但问题是关于“简单示例代码”。苹果强烈反对在Mac上使用openssl。苹果方面的争论是openssl的API不够稳定。Mac OS X上推荐的API是使用Security.framework。您不应该使用私钥解密吗?它可以双向使用。使用私钥加密和使用公钥解密类似于数字签名(请参阅)。根据文档,安全转换不能使用RSA密钥,并且OpenSSL不推荐在第三方应用程序中使用。所以只有#2和#4是现实的。我无法想象苹果为什么没有在OS X中使用SecKeyEncrypt和SecKeyDecrypt公共API。他们无法在不破坏iOS模拟器的情况下(永远)避免支持这些API,并且iOS SDK将它们列为OS X中可用的API。可能有人在错误的位置放置了一个#if,并且它被错误地从标题中删除。请提交一个bug。