我正在寻找生成RSA公钥/私钥对的最简单方法,swift我已经看到很多关于如何iOS不支持的讨论OpenSSL.
我只需要生成密钥对并将公钥发送到我的服务器,服务器将encrypt使用密钥将一些数据发送回我的私钥decrypt.这是一次性交易,之后我不再需要密钥了.
什么是最简单,最轻的解决方案?
这个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)
这是在 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)
| 归档时间: |
|
| 查看次数: |
6177 次 |
| 最近记录: |