如何使用CommonCrypto在Swift中生成RSA密钥?

如何使用CommonCrypto在Swift中生成RSA密钥?,swift,openssl,cryptography,rsa,commoncrypto,Swift,Openssl,Cryptography,Rsa,Commoncrypto,我需要编写一个函数,在OS X上生成一个新的RSA私钥,并能够打印出素数、模等。我不想在密钥链中使用或存储任何内容,只需编写一个简单的命令行工具 在C/Objective-C中,使用OpenSSL生成一个新密钥非常容易: RSA *keypair = RSA_generate_key(1024, 3, NULL, NULL); 但是OpenSSL不受欢迎,所以我的问题是如何使用本机CommonCrypto框架在Swift中编写一个等价物。这是不是很好的记录,我可以找到任何适合我到目前为止 任何

我需要编写一个函数,在OS X上生成一个新的RSA私钥,并能够打印出素数、模等。我不想在密钥链中使用或存储任何内容,只需编写一个简单的命令行工具

C/Objective-C中,使用OpenSSL生成一个新密钥非常容易:

RSA *keypair = RSA_generate_key(1024, 3, NULL, NULL);
但是OpenSSL不受欢迎,所以我的问题是如何使用本机CommonCrypto框架在Swift中编写一个等价物。这是不是很好的记录,我可以找到任何适合我到目前为止


任何人都可以分享这样做的代码片段吗?感谢您,CommonRSACryptor标头可在以下位置找到:

您可以使用以下代码创建桥接标头:

typedef int32_t CCCryptorStatus;
typedef struct _CCRSACryptor *CCRSACryptorRef;
CCCryptorStatus CCRSACryptorGeneratePair(size_t keysize, uint32_t e, CCRSACryptorRef *publicKey, CCRSACryptorRef *privateKey);
CCCryptorStatus CCRSACryptorExport(CCRSACryptorRef key, void *out, size_t *outLen);
void CCRSACryptorRelease(CCRSACryptorRef key);
之后,您可以使用Swift的CCRSACryptorGeneratePair、CCRSACryptorExport、CCRSACryptoreRelease功能

var privateKey: CCRSACryptorRef = nil
var publicKey: CCRSACryptorRef = nil
var status = CCRSACryptorGeneratePair(keySize, 65537, &publicKey, &privateKey)
guard status == noErr else {
    throw error("CCRSACryptorGeneratePair failed \(status)")
}
defer { CCRSACryptorRelease(privateKey) }
defer { CCRSACryptorRelease(publicKey) }

var privKeyDataLength = 8192
let privKeyData = NSMutableData(length: privKeyDataLength)!
var pubKeyDataLength = 8192
let pubKeyData = NSMutableData(length: pubKeyDataLength)!

status = CCRSACryptorExport(privateKey, privKeyData.mutableBytes, &privKeyDataLength)
guard status == noErr else {
    throw error("CCRSACryptorExport privateKey failed \(status)")
}
status = CCRSACryptorExport(publicKey, pubKeyData.mutableBytes, &pubKeyDataLength)
guard status == noErr else {
    throw error("CCRSACryptorExport publicKey failed \(status)")
}

privKeyData.length = privKeyDataLength
pubKeyData.length = pubKeyDataLength

图书馆也做同样的事情

请看:但这是通过钥匙链处理钥匙,我特别要求这样做,而不是通过它。谢谢你,我错过了,抱歉。希望其他人能帮助你。在我的mac(osx sierra)上,我在/usr/include/CommonCrypto中找不到Commonrsacyptor。我错过了什么?