使用swift

时间:2018-05-24 21:51:13

标签: ios swift encryption rsa

我应该使用通过HTTPS从服务器发送的字符串公钥加密某些数据并发送回服务器。

我做了很多研究,还研究了这些主题以及许多与之相关的其他事情,但无法解决我的问题。

我只是说我无法将字符串转换为seckey来使用此功能。

func SecKeyEncrypt(_ key: SecKey, 
             _ padding: SecPadding, 
             _ plainText: UnsafePointer<UInt8>, 
             _ plainTextLen: Int, 
             _ cipherText: UnsafeMutablePointer<UInt8>, 
             _ cipherTextLen: UnsafeMutablePointer<Int>) -> OSStatus

1 - how to encrypt and decrypt a String(Plain Text) with RSA public key in ios, swift

2 - https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/using_keys_for_encryption

这是用于加密的MyCode:

let publickey : SecKey = "# -----BEGIN PUBLIC KEY-----  some key  ---- 
END PUBLIC KEY----- #" as! SecKey

let message = "plain text"
let blockSize = SecKeyGetBlockSize(publicKey!)
var messageEncrypted = [UInt8](repeating: 0, count: blockSize)
var messageEncryptedSize = blockSize

var status: OSStatus!
        status = SecKeyEncrypt(publickey!, SecPadding(rawValue: 0), message, 
message.characters.count, &messageEncrypted, &messageEncryptedSize)

app在第一行崩溃。

2 个答案:

答案 0 :(得分:0)

你不能说

tf.contrib.seq2seq.attention_decoder_fn_train()

你不能只是拿一个字符串,并以某种方式神奇地把它作为一个SecKey。您必须从公钥派生 SecKey。

答案 1 :(得分:0)

你有90%的第一个链接。重要的是:

let data2 = Data.init(base64Encoded: serverPublicKey)

它希望输入为Base64编码,您的数据除外,还有# -----BEGIN PUBLIC KEY-----前缀(和后缀)。在尝试对数据进行base64解码之前,您需要将其关闭。确保data2中包含合法数据。

尝试使用String.dropFirst(Int)String.dropLast(Int),您应该能够将输入修剪为仅仅是Base64的内容。 (您可能还需要通过filter { $0 != "\n" }运行它。)

这应该可以让你到达你需要去的地方。如果你仍然被卡住,请告诉我。我有代码可以放在某个地方,但我手边没有它。