首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios swift上的ECDH

ios swift上的ECDH
EN

Stack Overflow用户
提问于 2017-03-21 22:22:38
回答 1查看 2.6K关注 0票数 2

我正在开发一个iOS应用程序,我想实现ECDH的安全性。我使用此应用程序(https://github.com/DigitalLeaves/AsymmetricCrypto)生成一对密钥(私钥和公钥),使用:

代码语言:javascript
复制
private let kAsymmetricCryptoManagerKeyType = kSecAttrKeyTypeEC
private let kAsymmetricCryptoManagerKeySize = 256
private let kAsymmetricCryptoManagerCypheredBufferSize = 128
private let kAsymmetricCryptoManagerSecPadding: SecPadding = .PKCS1

因此,我可以获取字符串形式的私钥和公钥,如下所示:

代码语言:javascript
复制
private key :3b3aef4e27c61e376bb1440f6a3077199d6d5ec665f6cd3595483a05ed96c498
public key X :3a405b5877d2939aea9dfb2995a89f4d63fca3c0cbb2a9d066fe67a08c499163
public key Y : 69bdbfc0ddea97ee03e85eb335db589cfcbee54b71f7fd74f6bc7344b5539ed6

这很好用。

现在,我想要的是执行ECDH,以在我生成的私钥和我(从另一个平台)获得的公钥之间生成共享密钥,就像字符串一样:

代码语言:javascript
复制
X: b1a2166411655482ad39630a480768dde4ccce5af4c53edec82496f17f0ddbfd
Y: e6dd01508da28f4f2295d9fee86239f88e8c5cbc94dbbb1f814b27c85d0d971a

因此,第一个问题是如何将字符串的最后两行转换为SecKey以生成公钥。

第二个问题是如何在我生成的私钥(作为SecKey)和我想在第一个问题中获得的新公钥之间执行ECDH。

下面是我用来生成密钥对的一小段代码:

代码语言:javascript
复制
 func createSecureKeyPair(_ completion: ((_ success: Bool, _ error: AsymmetricCryptoException?) -> Void)? = nil) {
        // private key parameters
        let privateKeyParams: [String: AnyObject] = [
            kSecAttrIsPermanent as String: true as AnyObject,
            kSecAttrApplicationTag as String: kAsymmetricCryptoManagerApplicationTag as AnyObject
        ]

        //public key parameters
        let publicKeyParams: [String: AnyObject] = [
            kSecAttrIsPermanent as String: true as AnyObject,
            kSecAttrApplicationTag as String: kAsymmetricCryptoManagerApplicationTag as AnyObject
        ]

        // global parameters for our key generation
        let parameters: [String: AnyObject] = [
            kSecAttrKeyType as String:          kAsymmetricCryptoManagerKeyType,
            kSecAttrKeySizeInBits as String:    kAsymmetricCryptoManagerKeySize as AnyObject,
            kSecPublicKeyAttrs as String:       publicKeyParams as AnyObject,
            kSecPrivateKeyAttrs as String:      privateKeyParams as AnyObject,
        ]

        // asynchronously generate the key pair and call the completion block
        DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { () -> Void in
            var pubKey, privKey: SecKey?
            let status = SecKeyGeneratePair(parameters as CFDictionary, &pubKey, &privKey)
            print("pub :",pubKey)

我想在这个网站上共享一个秘密:带有secp256r1参数的http://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-06-09 00:55:57

我通过代码从x和y获得了你的SecKey:

代码语言:javascript
复制
<SecKeyRef curve type: kSecECCurveSecp384r1, algorithm id: 3, key type: ECPublicKey, version: 4, block size: 384 bits, y: 7BA75DD35E74F1D6B6F1FE1FDB6F7977D7DE7BCEB6DFD7FCF1EF1CE5C6DCF7875B6DBD5FF35E1BDBB73CE5DD1DF7BD5A, x: 6F56B6D7AEB8D75EB9E78F3669DDFDEB7D1AE3CD3BEBC75D7B871C71EE5A7F8739DDE75E73CDB8F7A7F5EDFD1D75B7DD, addr: 0x7fda4a60d510>

你可以关注我的文章。

https://medium.com/@vaibhav.pmeshram/creating-and-dismantling-ec-key-in-swift-f5bde8cb633f

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42929802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档