Получение CCCryptorStatus "-4310" - PullRequest
0 голосов
/ 17 января 2019

Я делаю 3Des шифрование и дешифрование. Я получаю CCCryptorStatus "-4310", когда я вызываю метод шифрования класса шифра Пожалуйста, проверьте код и дайте мне знать, если я делаю что-то не так в моем коде

let mdKey = "12345678901234567890123456789012"
    let md = MessageDigest(.md5)
    let keydata = mdKey.data(using: String.Encoding.ascii)
    md.bytes = keydata!.bytes
    md.data = NSMutableData.init(data: keydata ?? Data())
    let result = md.final()
    print(result)


  let objCipher = Cipher(algorithm: Cipher.Algorithm.tripleDES, options: [.ECBMode,.PKCS7Padding])
    do{
        let encription = try objCipher.encrypt(messageData!.bytes, key: keydata!.bytes)
        print(encription)
    }catch let errorMessage{
        print(errorMessage)
    }

// Методы класса шифрования //

public func encrypt(_ data: Data, key: Key) throws -> [UInt8] {
    return try cryptoOperation(data, key: key, operation: .encrypt)
}

 public func decrypt(_ data: Data, key: Key) throws -> [UInt8] {
    return try cryptoOperation(data, key: key, operation: .decrypt)
}

fileprivate func cryptoOperation(_ data: Data, key: Key, operation: Operation) throws -> [UInt8] {
    var dataOutMoved = 0
    var outData = [UInt8](repeating: UInt8(0), count: Int(data.count + self.algorithm.blockSize))
    let ivData = "iv-salt-string--".data(using: String.Encoding.ascii)//self.iv == nil ? nil : UnsafeRawPointer(self.iv!)
    let status = CCCrypt(operation.rawValue, // operation
        self.algorithm.rawValue, // algorithm
        self.options.rawValue, // options
        key, // key
        key.count, // keylength
        ivData!.bytes, // iv
        data, // input data
        data.count, // input length
        &outData, // output buffer
        outData.count, // output buffer length
        &dataOutMoved) // output bytes real length
    if status == CCCryptorStatus(kCCSuccess) {
        return Array(outData[0..<dataOutMoved])
    } else {
        throw SCryptoError(rawValue: status)!
    }
}

1 Ответ

0 голосов
/ 18 января 2019

-4310 - это kCCKeySizeError. Похоже, вы передаете вывод MD5 в качестве ключа. MD5 выдает 128-битный хеш. 3DES требует 168-, 112- или 56-битный ключ. Так что есть несоответствие. Надеюсь, тот факт, что вы используете 3DES, означает, что вы поддерживаете совместимость с какой-то очень старой системой (если нет, прекратите использовать 3DES). Вам нужно будет изучить, как эта старая система управляет своими ключами. Вы не соответствуете требованиям другой стороны этой системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...