Я создаю приложение для 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)