0

フレームワーク Cryptoswift を使用して Swift でファイルを暗号化しようとしています。作ってみたのですが、mp4、mp3のように少し重いファイルだととても遅くなります。間違った方法で実装している場合、またはアルゴリズムがそのようなものである場合、何が起こっているのか本当にわかりません。

これが私のコードです。

do {
    // write until all is written
    let ex = "a"
    func writeTo(stream: OutputStream, bytes: Array<UInt8>) {
        var writtenCount = 0
        while stream.hasSpaceAvailable && writtenCount < bytes.count {
            writtenCount += stream.write(bytes, maxLength: bytes.count)
        }
    }
    let path = "somewhere"
    let aes = try AES(key: key, iv: iv)
    var encryptor = aes.makeEncryptor()

    // prepare streams
    //let data = Data(bytes: (0..<100).map { $0 })
    let inputStream = InputStream(fileAtPath: path)
    let outputStream = OutputStream(toFileAtPath: "somewhere", append: false)
    inputStream?.open()
    outputStream?.open()

    var buffer = Array<UInt8>(repeating: 0, count: 2)

    // encrypt input stream data and write encrypted result to output stream
    while (inputStream?.hasBytesAvailable)! {
        let readCount = inputStream?.read(&buffer, maxLength: buffer.count)
        if (readCount! > 0) {
            try encryptor.update(withBytes: buffer[0..<readCount!]) { (bytes) in
                writeTo(stream: outputStream!, bytes: bytes)
            }
        }
    }

    // finalize encryption
    try encryptor.finish { (bytes) in
        writeTo(stream: outputStream!, bytes: bytes)
    }

    if let ciphertext = outputStream?.property(forKey: Stream.PropertyKey(rawValue: Stream.PropertyKey.dataWrittenToMemoryStreamKey.rawValue)) as? Data {
        print("Encrypted stream data: \(ciphertext.toHexString())")
    }

} catch {
    print(error)
}
4

1 に答える 1

0

リリースビルドで再テストしてみてください。デバッグ ビルドを見ていると仮定すると、Swift コードは大幅に遅くなることが予想されます。

于 2018-02-07T02:49:34.093 に答える