Я получаю эту ошибку при расшифровке AES128CBC зашифрованы JSON:CryptoSwift AES128CBC с Swift
утверждение не удалось: Размер блока и вектор инициализации должен быть такой же длины !: файл ##### для IOS/CryptoSwift/Источники/CryptoSwift/AES.swift, строка 97
Я использую CryptoSwift Framework с последними Xcode.
Мой метод:
func aes128(key: String, iv: String) throws -> String?{
if let aes: AES = try AES(key: key, iv: iv, blockMode: .CBC){
if let encrypted: [UInt8] = try aes.encrypt([UInt8](self.utf8), padding: PKCS7()){
return String(data: NSData.withBytes(encrypted), encoding: NSUTF8StringEncoding)
}
}
return nil
}
Вызов:
do{
print(try dataStr.aes128("8e0c0e73f97f2eb386ad75ba86051334", iv: "aa17ffc4ea4b1eac8fa0b56872f34e5f"))
}catch{
}
В случае, если не 'iv' быть '[UInt8]'? Вы передаете 'String'. – SmokeDispenser
Кроме того, ключ и iv выглядят как хеши. Вы понимаете, что это плохая идея, поскольку она сводит к минимуму ключевую плоскость в шестнадцатеричные строки? Это делает грубую силу намного проще. – SmokeDispenser
Ваш ключ и iv имеют одинаковую длину, 32 байта. Предполагая, что вы используете 128-битный размер блока, ваш iv должен быть 16 байтов. Взгляните на этот ответ за идеи о том, как использовать CryptoSwift: http://stackoverflow.com/a/30820691/887210 – ColGraff