Шифровать данные с помощью внешнего ключа в Swift - PullRequest
0 голосов
/ 25 мая 2018

Я должен зашифровать некоторые данные с помощью строкового открытого ключа, отправленного с сервера через HTTPS, и отправить обратно на сервер.

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

Все, что я говорю, - то, что я не могу преобразовать строку в seckey, чтобы использовать эту функцию.

func SecKeyEncrypt(_ key: SecKey, 
             _ padding: SecPadding, 
             _ plainText: UnsafePointer<UInt8>, 
             _ plainTextLen: Int, 
             _ cipherText: UnsafeMutablePointer<UInt8>, 
             _ cipherTextLen: UnsafeMutablePointer<Int>) -> OSStatus

1- как зашифровать и расшифровать строку (обычный текст) с открытым ключом RSA в ios, swift

2- https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/using_keys_for_encryption

Это MyCode для шифрования:

let publickey : SecKey = "# -----BEGIN PUBLIC KEY-----  some key  ---- 
END PUBLIC KEY----- #" as! SecKey

let message = "plain text"
let blockSize = SecKeyGetBlockSize(publicKey!)
var messageEncrypted = [UInt8](repeating: 0, count: blockSize)
var messageEncryptedSize = blockSize

var status: OSStatus!
        status = SecKeyEncrypt(publickey!, SecPadding(rawValue: 0), message, 
message.characters.count, &messageEncrypted, &messageEncryptedSize)

сбой приложения в первой строке.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы на 90% с первой ссылкой.Важная часть:

let data2 = Data.init(base64Encoded: serverPublicKey)

Ожидается, что вход будет закодирован в Base64, как и ваши данные, за исключением того, что у вас также есть префикс # -----BEGIN PUBLIC KEY----- (и суффикс).Вам нужно снять их перед попыткой декодирования данных base64.Убедитесь, что в data2 есть допустимые данные.

Попробуйте использовать String.dropFirst(Int) и String.dropLast(Int), и вы сможете обрезать входные данные до чего-то, что является просто Base64.(Возможно, вам также понадобится запустить его через filter { $0 != "\n" }.)

Это должно привести вас туда, куда вам нужно идти.Дайте мне знать, если вы все еще застряли;У меня где-то есть код, который делает это, но у меня его нет под рукой.

0 голосов
/ 25 мая 2018

Вы не можете сказать

let publickey : SecKey = 
    "# -----BEGIN PUBLIC KEY-----  some key  ----END PUBLIC KEY----- #" as! SecKey

Вы не можете просто взять строку и каким-то волшебным образом разыграть ее как SecKey.Вы должны получить SecKey из открытого ключа.

...