Генерация открытого ключа RSA / закрытый ключ пары
Я ищу самый простой способ для создания RSA
пара открытый / закрытый ключ в swift
Я видел много разговоров о том, как iOS
не поддерживает OpenSSL
.
мне просто нужно сгенерировать пару ключей и отправляет открытый ключ на сервер, сервер encrypt
некоторые данные с ключом и отправить его обратно для моего закрытого ключа в decrypt
. Это одноразовая транзакция, и после этого мне больше не понадобится ключ.
что самое простое и легкое решение для этого?
2 ответов
этот GitHub РЕПО - Хеймдалл, должно помочь вам с генерацией ключей и шифрованием ваших данных.
пример использования:
if let heimdall = Heimdall(tagPrefix: "com.example") {
let testString = "This is a test string"
// Encryption/Decryption
if let encryptedString = heimdall.encrypt(testString) {
println(encryptedString) // "cQzaQCQLhAWqkDyPoHnPrpsVh..."
if let decryptedString = heimdall.decrypt(encryptedString) {
println(decryptedString) // "This is a test string"
}
}
// Signatures/Verification
if let signature = heimdall.sign(testString) {
println(signature) // "fMVOFj6SQ7h+cZTEXZxkpgaDsMrki..."
var verified = heimdall.verify(testString, signatureBase64: signature)
println(verified) // True
// If someone meddles with the message and the signature becomes invalid
verified = heimdall.verify(testString + "injected false message",
signatureBase64: signature)
println(verified) // False
}
шифрование данных с помощью собственного открытого ключа:
на swift-rsautils by btnguyen2k Utils должен помочь вам с шифрованием ваших данных с помощью вашего собственного открытого ключа. Его очень просто использовать.
как использовать:
сначала просто перетащите и бросьте RSAUtils.swift
файл для вашего проекта.
и вот оно!
шифрование основной строки:
let PUBLIC_KEY = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJh+/sdLdlVVcM5V5/j/RbwM8SL++Sc3dMqMK1nP73XYKhvO63bxPkWwaY0kwcUU40+QducwjueVOzcPFvHf+fECAwEAAQ=="
let sampleText:String = "WHATS UP"
let encrypted:NSData? = RSAUtils.encryptWithRSAPublicKey(sampleText.dataUsingEncoding(NSUTF8StringEncoding)!, pubkeyBase64: PUBLIC_KEY, keychainTag: "yourdomain.com")
let encryptedDataText = encrypted!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
print(encryptedDataText)
печатается:
ML5S87dfDB6l1uHFcACm2IdkGHpDGPUaYoSNTO+83qcWYxTEddFeKhETIcqF5n67nRDL0lKi5XV9uEI7hGTyKA==
Это самый простой способ создать пару ключей RSA в Swift с помощью SecKeyGeneratePair
:
var statusCode: OSStatus
var publicKey: SecKey?
var privateKey: SecKey?
let publicKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true, kSecAttrApplicationTag:"publicTag".dataUsingEncoding(NSUTF8StringEncoding)!]
let privateKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true, kSecAttrApplicationTag:"privateTag".dataUsingEncoding(NSUTF8StringEncoding)!]
var keyPairAttr = [NSObject: NSObject]()
keyPairAttr[kSecAttrKeyType] = kSecAttrKeyTypeRSA
keyPairAttr[kSecAttrKeySizeInBits] = 512
keyPairAttr[kSecPublicKeyAttrs] = publicKeyAttr
keyPairAttr[kSecPrivateKeyAttrs] = privateKeyAttr
statusCode = SecKeyGeneratePair(keyPairAttr, &publicKey, &privateKey)
if statusCode == noErr && publicKey != nil && privateKey != nil {
printMessage = "Key pair generated OK"
print("Public Key: \(publicKey!)")
print("Private Key: \(privateKey!)")
} else {
printMessage = "Error generating key pair: \(statusCode)"
}