Сгенерируйте симметричный ключ на iOS с помощью Security.framework

Я изо всех сил пытаюсь создать симметричный ключ в iOS, используя структуру безопасности. В SecKey.h есть метод SecKeyGenerateSymmetric(), но только для macOS. Единственное, что я вижу доступным, это SecKeyGeneratePair() для асимметричного шифрования.

Также из этой документации видно, что это единственный способ сделать симметричное шифрование. заключается в создании пары асимметричных ключей и вызове SecKeyCreateEncryptedData() с открытым ключом, а за кулисами генерируется симметричный ключ, но у вас нет к нему доступа. Мне нужен доступ к симметричному ключу.

Если у кого-то есть опыт симметричного шифрования на iOS, я был бы признателен за некоторые рекомендации.


person matt_roo    schedule 31.01.2019    source источник
comment
Взгляните на CryptoSwift github.com/krzyzanowskim/CryptoSwift.   -  person Rodrigo Morbach    schedule 01.02.2019


Ответы (1)


С введением CryptoKit это можно сделать с помощью следующего кода:

 import CryptoKit

 //generate Symmetric  key
 let key = SymmetricKey(size: .bits256)
    
  

Вот пример использования метода AES-GCM для шифрования и дешифрования с использованием 32-байтового симметричного ключа:

//generate Symmetric  key
 let key = SymmetricKey(size: .bits256)

  //encrypt plaintext
   let encryptedData = try!  AES.GCM.seal("plain-text".data(using: .utf8)!, using: key)
    print("Encrypted data using symmetric key:\(encryptedData)")
    
    //decrypt data
    let sealedBoxRestored = try! AES.GCM.SealedBox(nonce: encryptedData.nonce, ciphertext: encryptedData.ciphertext, tag: encryptedData.tag)
    let decryptedData = try! AES.GCM.open(sealedBoxRestored, using: key)
    print("Decrypted:\n\(String(data: decryptedData, encoding: .utf8)!)")
person BlackPearl12    schedule 02.07.2020