Deekor Deekor - 2 months ago 22x
Swift Question

Generate an RSA public / private key pair

I'm looking for the simplest way to generate an

public / private key pair in
I've been seeing a lot talk about how
doesn't support

I simply need to generate the key pair and send the public key over to my server, the server will
some data with the key and send it back over for my private key to
. This is a one time transaction and I wont need the key anymore after that.

What is the simplest and lightest solution for this?


This Github repo - Heimdall, should help you with generating keys and encrypting your data.

Example usage:

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

Encrypting data with own public key:

The swift-rsautils by btnguyen2k Utils should help you with encrypting your data with your own public key. Its really simple to use.

How to use:

First just drag and drop the RSAUtils.swift file to your project.

And thats it!

Encrypting basic string:

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: "")

let encryptedDataText = encrypted!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())


This prints: