Итак, у меня есть требование, где я должен зашифровать Strings
, используя RSA .
Посмотрите на этот буфер обмена
Так что после некоторых исследований я обнаружил, что этот может быть правильным ответом для моего случая,
После изменения кода, чтобы сформировать это на последнем этапе.
private func encrypt(with key: String) {
let serverPublicKey = key.data(using: .utf8)?.base64EncodedData()
guard let serverPublicKey2 = serverPublicKey else { return }
let data2 = Data(base64Encoded: serverPublicKey2)
guard let data = data2 else { return }
let keyDict:[NSObject:NSObject] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits: NSNumber(value: 2048),
kSecReturnPersistentRef: true as NSObject
]
let publickeysi = SecKeyCreateWithData(data as CFData, keyDict as CFDictionary, nil)
guard let publicKeySi = publickeysi else { return }
//Encrypt a string with the public key
let message = "This is my message." // this field in bullet point one
let blockSize = SecKeyGetBlockSize(publicKeySi)
var messageEncrypted = [UInt8](repeating: 0, count: blockSize)
var messageEncryptedSize = blockSize
var status: OSStatus!
status = SecKeyEncrypt(publickeysi!, SecPadding.PKCS1, message, message.count, &messageEncrypted, &messageEncryptedSize)
if status != noErr {
print("Encryption Error!")
return
}
}
- Я не знаю, что означает поле
message
, и, исходя из моих требований, это то место, где мне нужно разместить свой UUID
/ Pin
& server PublicKey
.Функция - экранирует замыкание в
SecKeyCreateWithData
, поскольку всегда возвращает nil
, Чего мне не хватает.