RNCryptor: AES128CBC расшифровывает в Swift

Как я могу расшифровать NSData с помощью RNCryptor (AES128CBC)? Я уже пытался понять документацию: https://github.com/RNCryptor/RNCryptor-Spec/blob/master/draft-RNCryptor-Spec-v4.0.md

Редактировать:

class Decription{
    func AES128(message: String, key: String, iv: String){
        let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
        let ivData:  NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
        let data:    NSData! = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
        let cryptData        = NSMutableData(length: Int(data.length) + kCCBlockSizeAES128)!

        let keyLength              = size_t(kCCKeySizeAES256)
        let operation: CCOperation = UInt32(kCCDecrypt)
        let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmAES128)
        let options:   CCOptions   = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)

        var numBytesEncrypted :size_t = 0

        let cryptStatus = CCCrypt(
            operation,
            algoritm,
            options,
            keyData.bytes,
            keyLength,
            ivData.bytes,
            data.bytes, data.length,
            cryptData.mutableBytes,
            cryptData.length,
            &numBytesEncrypted
        )

        if UInt32(cryptStatus) == UInt32(kCCSuccess) {
            cryptData.length = Int(numBytesEncrypted)
            print("Decrypted Result = \(NSString(data: cryptData, encoding: NSUTF8StringEncoding))")
        } else {
            print("Error: \(cryptStatus)")
        }
    }
}

Я изменил фрагмент кода @zaph, связанный с. Вы можете увидеть результат выше.

NSString(data: cryptData, encoding: NSUTF8StringEncoding) Результаты nil, В чем проблема?

1 ответ

Сначала вы шифруете, используя RNCryptor, а не какой-то другой метод, потому что RNCryptor - это больше, чем просто шифрование AES, это полный метод безопасного шифрования, включая получение ключа и аутентификацию. Посмотрите RNCryptor-Spec для получения дополнительной информации.

Если вы просто хотите расшифровать, используйте Common Crypto с Swift, см. Этот Ответ SO, например, код.

Примечание: пример кода просто так, он не должен использоваться как есть в рабочем коде. В частности, режим ECB небезопасен, используйте CBC со случайным iv и рассмотрите возможность добавления аутентификации и получения ключа к паролю, например PBKDF2.

Другие вопросы по тегам