Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Swift或Objective C中使用PKCS8 RSA DER私钥_Ios_Objective C_Swift - Fatal编程技术网

Ios 如何在Swift或Objective C中使用PKCS8 RSA DER私钥

Ios 如何在Swift或Objective C中使用PKCS8 RSA DER私钥,ios,objective-c,swift,Ios,Objective C,Swift,我发现了类似的问题,但对我来说不起作用 不容易。苹果公司希望您使用证书(公钥)或身份(.p12文件,公钥/私钥对),这使得存储原始密钥变得困难。这尤其适用于私钥——如果可以避免的话,您通常不希望内存空间中有未加密的私钥。在OSX上,SecItemImport()可以工作,但在iOS上不行,尽管我现在还没有检查几个OS版本 如果确实需要,可以强制执行它,但它必须是PKCS#1 DER数据——因此必须从PKCS#8数据中提取PKCS#1密钥,这意味着必须手动解析DER 这是公钥PKCS#8数据的较旧

我发现了类似的问题,但对我来说不起作用


不容易。苹果公司希望您使用证书(公钥)或身份(.p12文件,公钥/私钥对),这使得存储原始密钥变得困难。这尤其适用于私钥——如果可以避免的话,您通常不希望内存空间中有未加密的私钥。在OSX上,
SecItemImport()
可以工作,但在iOS上不行,尽管我现在还没有检查几个OS版本

如果确实需要,可以强制执行它,但它必须是PKCS#1 DER数据——因此必须从PKCS#8数据中提取PKCS#1密钥,这意味着必须手动解析DER

这是公钥PKCS#8数据的较旧示例:

使用该代码,您可以获得公钥的SecKeyRef;私钥的结构稍有不同,但想法相似


不过,最好的办法是获取一个.p12文件并使用
SecPKCS12Import()
。这将获得SecIdentityRef,从那里可以使用SecIdentityCopyPrivateKey()获取私钥SecKeyRef。

不容易。苹果公司希望您使用证书(公钥)或身份(.p12文件,公钥/私钥对),这使得存储原始密钥变得困难。这尤其适用于私钥——如果可以避免的话,您通常不希望内存空间中有未加密的私钥。在OSX上,
SecItemImport()
可以工作,但在iOS上不行,尽管我现在还没有检查几个OS版本

如果确实需要,可以强制执行它,但它必须是PKCS#1 DER数据——因此必须从PKCS#8数据中提取PKCS#1密钥,这意味着必须手动解析DER

这是公钥PKCS#8数据的较旧示例:

使用该代码,您可以获得公钥的SecKeyRef;私钥的结构稍有不同,但想法相似

不过,最好的办法是获取一个.p12文件并使用
SecPKCS12Import()
。这将获得SecIdentityRef,然后可以使用SecIdentityCopyPrivateKey()获取私钥SecKeyRef。

查看。它演示了如何使用
secitemport
加载密钥进行签名和验证

您还应该仔细查看
SecExternalFormat
enum,其中包含
kSecFormatWrappedPKCS8
。这可能就是你要找的东西。

看看。它演示了如何使用
secitemport
加载密钥进行签名和验证


您还应该仔细查看
SecExternalFormat
enum,其中包含
kSecFormatWrappedPKCS8
。这可能就是您要查找的内容。

请添加一些您尝试的内容的代码请添加一些您尝试的内容的代码谢谢您的回答,任何时候SecKeyGetBlockSize引发异常
错误访问
,我都无法理解原因。
NSString*路径=[[NSBundle mainBundle]路径用于资源:@“私钥”类型:@“pem”];NSData*content=[[NSData alloc]initWithContentsOfFile:path];SecKeyRef privateKey=(桥SecKeyRef)(内容);如果(privateKey){signedHashBytesSize=SecKeyGetBlockSize(privateKey);}
我发现这个解决方案链接在下面,但是
#include
没有发现,你无法从
NSData
桥接
SecKeyRef
。您需要使用
secitemport
。您看过上面的存储库了吗?它包含一个示例代码。感谢您的回答,任何时候SecKeyGetBlockSize出现异常
访问错误
,我都无法理解原因。
NSString*path=[[NSBundle mainBundle]pathForResource:@“private_key”,类型:@“pem”];NSData*content=[[NSData alloc]initWithContentsOfFile:path];SecKeyRef privateKey=(桥SecKeyRef)(内容);如果(privateKey){signedHashBytesSize=SecKeyGetBlockSize(privateKey);}
我发现这个解决方案链接在下面,但是
#include
没有发现,你无法从
NSData
桥接
SecKeyRef
。您需要使用
secitemport
。您看过上面的存储库了吗?它包含一个示例代码。