Теперь у меня уже есть пара ключей.

Я хочу импортировать эту пару ключей в свой Swift и использовать эту пару ключей для шифрования

Что-то или расшифровать что-то, что я получил от restclint

Я вижу, что во многих документах говорится, как создать общую пару ключей, но она у меня уже есть.

И что означает kSecAttrApplicationTag?

Пожалуйста, помогите мне

var dataPtr:Unmanaged<AnyObject>?
let query: [String:AnyObject] = [
kSecClass: kSecClassKey,
kSecAttrApplicationTag: "com.example.site.public",
kSecReturnData: kCFBooleanTrue
]
let qResult = SecItemCopyMatching(query, &dataPtr)
// error handling with `qResult` ...
let publicKeyData = dataPtr!.takeRetainedValue() as NSData
// convert to Base64 string
let base64PublicKey = publicKeyData.base64EncodedStringWithOptions(nil)
1
Frank Liao 3 Мар 2015 в 09:03

2 ответа

Взгляните на Swift-RSAUtils, он предоставляет то, что вам нужно. Я не могу отблагодарить Тхань Ба Нгуена за его фантастическую новаторскую работу в этой области. Apple, позор тебе за то, что ты делаешь жизнь разработчиков такой несчастной!

В основном, история такова: вы должны загрузить ключи в их формате DER или PEM (и декодировать base64 в случае PEM), затем вырезать из него некоторые части, затем импортировать ключи в связку ключей системы. Как только это будет сделано, вы можете достать их из брелка и использовать. К сожалению, Apple не задокументировала это, особенно для Swift. Единственная справочная документация, которую я смог найти, это Certificate, Key и Справочник по службам доверия, и убедитесь, что вы нажимаете «оба», а не только «Swift», иначе вы не увидите многого. Или забудьте об этом и используйте Swift-RSAUtils, код в значительной степени говорит сам за себя.

5
Chrissi 11 Фев 2016 в 13:43

Самое простое объяснение: когда вы храните что-то в цепочке для ключей, у него есть уникальный ключ (для идентификации цели). kSecAttrApplicationTag: «com.example.site.public» означает «эй, уникальный ключ, который я использую, — «com.example.site.public»».

Ура ,

1
btnguyen 18 Сен 2016 в 20:49