- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Go 中的 GCM 和 CBC AES 密码不能与 StreamWriter 或 StreamReader 一起使用,这迫使我将整个文件分配到内存中。显然,这对于大文件来说并不理想。
我正在考虑通过将一些固定大小的 block 分配到内存中并将它们提供给 GCM 或 CBC 来使它们可流式传输,但我认为这可能是个坏主意,因为它们必须有一个原因就是这样设计的。
有人可以解释为什么不将整个文件分配到内存中就不能使用这些操作模式吗?
最佳答案
简单的答案 - 这就是他们设计 API 的方式。
CBC 和 GCM 是非常不同的模式。 GCM 是 AEAD 模式(带关联数据的身份验证加密)。你真的需要身份验证吗?如果不是,对于大文件,CBC 是一个不错的选择。您也可以使用 CTR 或 OFB,但它们是流式传输模式并且对选择 IV 非常严格。
在执行任何操作之前,我建议您阅读这些模式。您至少必须了解它们需要哪些参数、用于什么目的以及应如何生成它们。
BlockMode
接口(interface)非常适合加密大文件。您只需要逐 block 加密。 CBC 需要填充,但 Go 没有实现。至少,我没有看到一个。你将不得不以某种方式处理它。
GCM 使用AEAD
接口(interface),它只允许您加密和解密整个消息。绝对没有理由这样实现。 GCM是streaming mode,其实很适合streaming encryption。唯一的问题是身份验证。 GCM 在末尾生成一个标记,其作用类似于 MAC。要使用该标签,您不能只加密无穷无尽的数据流。您必须将它分成 block 并分别对它们进行身份验证。或者做其他事情,但在某些时候您必须读取该标签并验证它,否则使用 GCM 毫无意义。
一些库(包括 Go)所做的是,它们在加密时隐式地在末尾附加该标记,并在解密时读取和验证它。就个人而言,我认为这是一个非常糟糕的设计。标签应该作为一个单独的实体提供,你不能假设它总是在最后。这并不是 Go 实现中的唯一问题。对不起,咆哮。最近我处理了一个特别糟糕的实现。
作为一种解决方案,我建议您将流分成 block 并使用唯一的随机数分别加密它们(这非常重要)。每个 block 的末尾都有一个标签,您应该验证该标签。这样您就可以使用 GCM 身份验证。是的,这有点丑陋,但 Go 不允许您访问内部方法,因此您可以制作自己的加密 API。
作为替代方案,您可以找到不同的实现方式。甚至是 C 库。我可以建议 mbedtls。对我来说,这是我在 API 方面遇到的最佳实现。
关于encryption - 使 GCM/CBC 密码在 golang 中流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39378051/
我刚刚更新了 Ruby,现在我在尝试启动 compass 时遇到以下错误: Encoding::CompatibilityError on line ["28"] of /usr/local/Cell
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在我的 iOS 应用程序中开发可折叠/ Accordion 式的功能。这将是您可以在网站上找到的典型 FAQ 类型功能。我想点击标题,然后显示详细信息。 因为这是帮助部分,只有几个项目,我认
我正在尝试设计一个基于 REST 的 Web 服务来与我正在开发的农场动物管理系统进行交互。 为了详细说明问题,我收藏了动物 属于一个农场。每只动物都有自己的信息——例如姓名、身份证号、品种年龄等。因
我有 3 种不同的表单,其中复选框数量不同,每个部分基本上代表一个表单,因此当用户选择该部分中的复选框时,它会显示他们在该部分的总金额中 checkout 了多少 HTML
我有一份 32 页的 PDF 版家谱。与其将家谱全部放在一个非常大的 PDF 页面上(这是我想要的),不如将其格式化为一组 8 个单独的美国信纸大小的页面应该在整个宽度上缝合; 4 行这样就完成了树。
指SASS implementation for Java? : 在 Maven 目标编译包中自动编译 compass-style.org 样式表的最佳方法是什么? 我不想发送太多的自编译库,也不想通
鉴于以下 XAML... 我正在寻找一种绑定(bind) ComboBox、Button 和 Command 的方法,以便当 ComboBox 的值更改时,在 Command 上调用 CanExe
在玩具应用程序中,我有一个显示所有帖子标题的“帖子”模板。当您单击每个标题时,我不想直接进入“显示” View ,而是直接内联展开该帖子的其余内容。 我考虑过让 postRoute 重用 postsR
我需要一些使用 Twitter Bootstrap 或其他响应式框架的自定义 Swagger-UI 实现。需要在我的移动设备上使用这样的 UI 测试我的 API,但 swagger-ui 不能很好地扩
我正在做一个项目,我真的在尝试编写面向对象的 JavaScript 代码。我刚刚开始阅读Douglas Crockford's JavaScript: The Good Parts我很快开始意识到用
在 C# 中,我通过执行以下操作来加密文本数据(请注意我正在以 block ( block )的形式加密数据): public string EncryptData(string pu
我正在构建一个社交网站,该网站将向全世界公开 REST API (WCF WebAPI),以便任何开发人员都能够为该网站创建客户端应用程序、将其与其他服务集成等。 我想为 API 实现 Faceboo
我是一名优秀的程序员,十分优秀!