Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
获取RSA私钥';s n和d使用Swift_Swift_Cryptography_Rsa - Fatal编程技术网

获取RSA私钥';s n和d使用Swift

获取RSA私钥';s n和d使用Swift,swift,cryptography,rsa,Swift,Cryptography,Rsa,我试图在Swift中实现姚明的百万富翁问题算法,但遇到了一个障碍 为了实现这个算法,我需要生成一个RSA私钥并获取n和d 到目前为止,我已经创建了如下密钥: import Security import Foundation let tag = "com.example.keys.mykey".data(using: .utf8)! let attributes: [String: Any] = [kSecAttrKeyType as String: kSecAttrKeyTypeRSA,

我试图在Swift中实现姚明的百万富翁问题算法,但遇到了一个障碍

为了实现这个算法,我需要生成一个RSA私钥并获取
n
d

到目前为止,我已经创建了如下密钥:

import Security
import Foundation

let tag = "com.example.keys.mykey".data(using: .utf8)!
let attributes: [String: Any] = [kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
    kSecAttrKeySizeInBits as String: 1024,
    kSecPrivateKeyAttrs as String:
        [kSecAttrIsPermanent as String: false,
        kSecAttrApplicationTag as String: tag]
]

var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
    throw error!.takeRetainedValue() as Error
}
导入安全性
进口基金会
让tag=“com.example.keys.mykey”。数据(使用:.utf8)!
let attributes:[String:Any]=[kSecAttrKeyType as String:kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits作为字符串:1024,
kSecPrivateKeyAttrs作为字符串:
[kSecAttrIsPermanent作为字符串:false,
kSecAttrApplicationTag作为字符串:tag]
]
var错误:非托管?
guard let privateKey=SecKeyCreateRandomKey(属性为CFDictionary,&错误)else{
抛出错误!.takeRetainedValue()作为错误
}
privateKey
似乎属于
SecKey
类型,但我不知道如何从中获取
n
d


如何生成RSA私钥并获取
n
d
值?

您正在寻找函数。当传递一个
SecKey
时,此函数将返回一个
CFDictionary
,其中包含一个键
v_Data
,该键包含一个描述该键的DER编码属性序列:

PrivateKey ::= SEQUENCE {
    version           INTEGER,
    modulus           INTEGER, <- n
    publicExponent    INTEGER,
    privateExponent   INTEGER, <- d
    prime1            INTEGER,
    prime2            INTEGER,
    exponent1         INTEGER,
    exponent2         INTEGER,
    coefficient       INTEGER,
    otherPrimeInfos   OtherPrimeInfos OPTIONAL
 }
PrivateKey::=序列{
版本整数,

模整数,多亏了Luke的答案,我让它工作如下。我决定使用BigInt swift包

import BigInt

var error2: Unmanaged<CFError>?
let privateKeyData = SecKeyCopyExternalRepresentation(privateKey!, &error2) as Data?
let privateKeyDataN = privateKeyData![10...10+128]
let privateKeyDataD = privateKeyData![147...147+127]
let n = BigUInt(privateKeyDataN)
let d = BigUInt(privateKeyDataD)
导入BigInt
变量错误2:非托管?
让privateKeyData=SecKeyCopyExternalRepresentation(privateKey!,&error2)作为数据?
让privateKeyDataN=privateKeyData![10…10+128]
让privateKeyDataD=privateKeyData![147…147+127]
设n=BigUInt(privateKeyDataN)
设d=BigUInt(privateKeyDataD)