swift-ecdh

swift 在iOS10之后,支持ecdh加解密。

1.生成公钥和私钥。

   func generateKey() {
        
        let attributes: [String: Any] = [kSecAttrKeySizeInBits as String: 256,
                                         kSecAttrKeyType as String: kSecAttrKeyTypeEC,
                                         kSecPrivateKeyAttrs as String: [kSecAttrIsPermanent as String: false]]
        var error: Unmanaged<CFError>?
        
        self.privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error)
        
        if self.privateKey != nil {
            self.publicKey = SecKeyCopyPublicKey(self.privateKey!)
        }
    }

2.加密

func encryptedData(sourceData: Data, algorithm:SecKeyAlgorithm) -> Data? {
        
        guard self.publicKey != nil else {
            return nil
        }
        
        var error: Unmanaged<CFError>?
        
        let encrypted =
            SecKeyCreateEncryptedData(self.publicKey!, algorithm,
                                      sourceData as CFData,
                                      &error)
        if error == nil {
            return encrypted! as Data
        }
        
        return nil
    }

3.解密

   func decryptedData(sourceData: Data, algorithm:SecKeyAlgorithm ) -> String? {
        
        var error: Unmanaged<CFError>?
        
        let resData = SecKeyCreateDecryptedData(self.privateKey! , algorithm,
                                                sourceData as CFData, &error)
        
        if error == nil {
            return String(data: resData! as Data, encoding: String.Encoding.utf8)
        }
        
        return nil
    }

4.示例

        let sign = YKEcdhSign()
            sign.generateKey()
            let enData =  sign.encryptedData(sourceData: originalData!, algorithm: SecKeyAlgorithm.eciesEncryptionStandardX963SHA512AESGCM)
            let string = sign.decryptedData(sourceData: enData!, algorithm: SecKeyAlgorithm.eciesEncryptionStandardX963SHA512AESGCM)
            print(string!)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文摘自 腾讯bugly 的文章《全站 HTTPS 来了》,内容有修改。 大家在使用百度、谷歌或淘宝的时候,是否注...
    bnotes阅读 3,726评论 1 9
  • 一、准备知识 在开始介绍前,需要首先了解一下消息摘要、数字签名、数字证书的知识 1、消息摘要 - Message ...
    浪够_阅读 2,768评论 1 2
  • 6.1 公钥密钥加密原理 6.1.1 基础知识 密钥:一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算...
    AndroidMaster阅读 4,044评论 1 8
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    sunny冲哥阅读 1,408评论 0 3
  • 数字证书原理 - 无恙 - 博客园 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明...
    拉肚阅读 1,696评论 0 3