Шифрование данных с помощью CryptoSwift от EasyCrypt - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю приложение для iOS (XCode 10, Swift 4), и мне нужны некоторые функции шифрования / дешифрования.Я работаю с CryptoSwift (https://github.com/krzyzanowskim/CryptoSwift),, но разработчик Android работает с EasyCrypt (https://github.com/pvasa/EasyCrypt).

) Разработчик Android использует эту функцию из EasyCrypt для шифрования данных:

eCryptSymmetric.encrypt (input, password,
object : ECResultListener {

    // Optional
    override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

    }

    override fun <T> onSuccess(result: T) {

    }

    override fun onFailure(message: String, e: Exception) {

    }
},
outputFile // Optional

)

И это другое для расшифровки данных:

eCryptSymmetric.decrypt(input, password,
    object : ECResultListener {

        // Optional
        override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

        }

        override fun <T> onSuccess(result: T) {

        }

        override fun onFailure(message: String, e: Exception) {

        }
    },
    outputFile // Optional

)

Как я могу шифровать / дешифровать данные, чтобы стать совместимым с этой библиотекой и приложением Androidиспользуя CryptoSwift?

У меня есть эта функция дешифрования в приложении iOS (пытается расшифровать зашифрованные данные Android):

do {
        portfolioText = try String(contentsOf: fileURL)

        //let password = "1234".padding(toLength: 32, withPad: "0", startingAt: 0)
        let iv = "passwordpasswordwordpasswordpass"
        let key = try! PKCS5.PBKDF2(password: "1234".bytes, salt: iv.bytes, iterations: 4096, keyLength: 16, variant: .md5).calculate()

        let aesCipher = try AES(key: key, blockMode: CBC(iv: iv.bytes))
        //let decrypted = try AES(key: key, iv: iv).decrypt(portfolioText.bytes)
        let decrypted = try aesCipher.decrypt(portfolioText.bytes)
        print(decrypted)
    } catch let error {
        print("Error: \(error)")
    }

Но результат ошибки таков:

Error: dataPaddingRequired

Любая помощь будет полезно узнать об этой проблеме.Заранее спасибо:

К вашему сведению: я пробую другие методы из CryptoSwift, но все возвращают ошибку:

Error: dataPaddingRequired

Разработчик Android использует dataPadding pkcs7.Я пытаюсь с:

let aesCipher = try AES(key: aesKey.bytes, blockMode: CBC(iv: ivKey.bytes), padding: .pkcs7)

, но в любом случае получаю ошибку!

Это данные, поступающие из приложения Android, зашифрованные с помощью пароля 1234:

jNoaEXO-3lE7BUvnHCZOc3yVZRyUP7cMHjII9JkkdjI-OfVMrS_WIHvZJ05CKoHEfXdZfaOGwTes

MOaTQPXH53HyntYg-9dmCAUCnPqNUnauB1Uux0I3uiWOis-kfXNURHSu1nUnSNIvwoKpOB 4pFluQbCRFuDzPSly03Au5MOKnimXI3VmqR-r5hARq52HMRqA9daX2jvbHQ5hxEZFmnBllKHuQwO tF2vbSUfx6A5Wiy3lKrKk6c5-zJCUEW0HwCX8vjYCL9zXbVhDgb4-a0qn3lTaSyFiw2jy331Q-GS GVIb6rXPLHz2kamIwm5hDtXdl6TCKWXchGJcBgBOoBmuHMt976eIzWFmbtZXQFNZw3vTHsE-xw1h uvoL9QNi9RjLRfF0Ns23_0jyiK16zfQVq5_TAzxVNKp8_QSYXJV_wPOJaulX2tbRhq3Z0ZyeU_ls fsUUmXeacVdwuYkmGWwMv62d-eaIRjec9svI2bXhW2CwlOiJ9taY2z6GxmIe5Yoeq6-2QYLay6PA 2_PKZNgEBUudswrktjEuIp7z2jbRppFjb-mwUJpa0Gal8_vI8NEEblNzAhGPQNEjFII_62AB2gcd ayqNOEcAt-GiAvwkn-6HV4Org_cqPbbmPbanqQCPzxFf63NhGaHGrANZV9srWRbUbD7ifV4eLQJR 3NEeTuhFnfBb2BsUdIr8Pe4l_bbfQ5ehChq3KdbMwrib8tVbOT2fQK6oKHYl-ZtXOrrtlZ11LCOu SmE2ls1Ymkc62FdRmjas31wTAT0Z9dYCTanCziiRkYVUbAK53lHLQhI_Q3HzkZFjXmCIfFfCkpEy o_dpyL6AA5HnOzW2-1S6-qxNX4KBUByzc6wexznQVes-y_gbGLAjlLkdA8UdEpanh9L2RyykW7ms mMbXCcuBpMNcRe15Fy0GHLc0mKeOTPr1wHNKdfAPw76KRgWKkzO2RKw3T5PnAZHnsSbuyfUZ-BiY Z0jvmVrLV_OiPxruwy9n8uY8uGyGyyyjjjjjjjjjjjjjjjjjjjjjjjjjjjjjyyuyyuyyyuyyuyyuyyuyyyuyyyuyyyuyy тожеТак что не работай:

let portfolioBytes = Padding.pkcs7.add(to: portfolioText.bytes, blockSize: AES.blockSize)
...