CryptoSwift AES Шифрование и дешифрование - PullRequest
1 голос
/ 13 мая 2019

Я использую «CryptoSwift 1.0.0» и Swift 5 с Xcode 10.2 для приложения для iOS, шифрование CryptoSwift работает отлично, а также шифрование и дешифрование моего сервера PHP.

Но я получаю эту ошибку: dataPaddingRequired, когда этот метод выполняется:

let cipher = try aes.decrypt(Array<UInt8>(cryptedData))

это мой код:

Функция шифрования

static func cryptArtisan(strClair: String) -> [String:String] {
    let key = generateStringKey()
    var cryptedMessage = ""
    var cryptedKey = ""
    do {
        let aes = try AES(key: Array<UInt8>(key.utf8), blockMode: ECB(), padding: .pkcs5) // aes128

        let ciphertext = try aes.encrypt(Array(strClair.utf8))
        cryptedMessage = ciphertext.toBase64()!

        let publicKey = try PublicKey(derNamed: "public")
        let clear = try ClearMessage(string: key, using: .utf8)
        let encrypted = try clear.encrypted(with: publicKey, padding: .PKCS1)
        cryptedKey = encrypted.base64String
    } catch { }

    cryptedMessage = cryptedMessage.replacingOccurrences(of: "+", with: "%2B")
    cryptedKey = cryptedKey.replacingOccurrences(of: "+", with: "%2B")

    return ["msg":cryptedMessage, "key":cryptedKey, "clairKey": key]
}

Функция расшифровки

static func decryptArtisan(cryptedMessage: String , key:String) -> String? {
    var clairMessage:String? = nil;

    if let cryptedData = Data(base64Encoded: cryptedMessage) {
        do {
            let aes = try AES(key: Array<UInt8>(key.utf8), blockMode: ECB(), padding: .pkcs5) // aes128
            let cipher = try aes.decrypt(Array<UInt8>(cryptedData))
            clairMessage = String(bytes: cipher, encoding: .utf8)
        }catch{
            print(error)
        }
    }

    return clairMessage
}

Как мне расшифровать зашифрованное сообщение, отправленное сервером?

Обновление: Я пытался не приводить ошибку к NSError, я заметил, что ошибка dataPaddingRequired была выброшена.

...