生成RSA公钥/私钥对

Dee*_*kor 7 swift swift2

我正在寻找生成RSA公钥/私钥对的最简单方法,swift我已经看到很多关于如何iOS不支持的讨论OpenSSL.

我只需要生成密钥对并将公钥发送到我的服务器,服务器将encrypt使用密钥将一些数据发送回我的私钥decrypt.这是一次性交易,之后我不再需要密钥了.

什么是最简单,最轻的解决方案?

Dej*_*dar 5

这个Github repo - Heimdall,可以帮助您生成密钥和加密数据.

用法示例:

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
}
Run Code Online (Sandbox Code Playgroud)

使用自己的公钥加密数据:

迅速-rsautils通过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)
Run Code Online (Sandbox Code Playgroud)

这打印:

ML5S87dfDB6l1uHFcACm2IdkGHpDGPUaYoSNTO+83qcWYxTEddFeKhETIcqF5n67nRDL0lKi5XV9uEI7hGTyKA==
Run Code Online (Sandbox Code Playgroud)


eha*_*ro2 5

这是在 Swift 中生成 RSA 密钥对的最简单方法,使用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)"
        }
Run Code Online (Sandbox Code Playgroud)