Вопрос: Создание пары открытых и закрытых ключей RSA


Я ищу простейший способ генерации RSA открытый / закрытый ключ в swift Я много говорил о том, как iOS не поддерживает OpenSSL,

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

Какое самое простое и легкое решение для этого?


6


источник


Ответы:


Этот репортаж 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
}

Шифрование данных с помощью открытого ключа:

Свифта-rsautils  от btnguyen2k  Утилиты должны помочь вам в шифровании ваших данных с помощью собственного открытого ключа. Его очень простой в использовании.

Как использовать:

Сначала просто перетащите 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==

5



Это самый простой способ создания пары ключей 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)"
        }

4