cccrypt генерирует странный вывод в swift 4 - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь написать функцию шифрования (AESCBC256) на основе CCCrypt, а CCCrypt генерирует случайное значение.

Например, когда я передаю 1234567 для функции, она возвращает "HlFP2rCmycZS1269Cm47Q ==" или«TTuSJrBcsOmOCDHc5IQ8Dw ==» для того же самого iv и Key.

вот iv: b5f89591 и ключ: 366e9c1b4b2ed2b1daf751d7500aaa01

func encrypt(Value: String)->String{
    let keyData = keyString.data(using: .utf8, allowLossyConversion: false)!
    let iv = SecretKey.data(using: .utf8, allowLossyConversion: false)!
    let message       = SecretKey+Value
    let data = message.data(using: .utf8, allowLossyConversion: false)!
    let cryptData    = NSMutableData(length: Int(data.count) + kCCBlockSizeAES128)!
    let keyLength              = size_t(kCCKeySizeAES256)
    let operation: CCOperation = CCOperation(UInt32(kCCEncrypt))
    let algoritm:  CCAlgorithm = CCAlgorithm(UInt32(kCCAlgorithmAES128))
    let options:   CCOptions   = CCOptions(UInt32(kCCOptionPKCS7Padding))
    var numBytesEncrypted :size_t = 0
    let cryptStatus = CCCrypt(operation,
                              algoritm,
                              options,
                              keyData.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
                              keyLength,
                              iv.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
                              data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in return bytes},
                              data.count,
                              cryptData.mutableBytes, cryptData.length,
                              &numBytesEncrypted)

    if UInt32(cryptStatus) == UInt32(kCCSuccess) {
        cryptData.length = Int(numBytesEncrypted)
        return String(describing: cryptData.base64EncodedString(options: .lineLength64Characters))
    }else{
        return ""
    }
}

1 Ответ

0 голосов
/ 12 июня 2018

Ваш IV неправильная длина.Его длина составляет 8 байтов, но AES требует 16-байтового IV, поэтому он считывает случайные данные из памяти для остальных 8 байтов.

...