为什么使用 CryptoStream 而不是 TransformBlock?

2023-12-09

文档从未真正提及原因CryptoStream应该使用而不是TransformBlock and TransformFinalBlock除此之外,它会自动调用所需的任何一个。

因此,为什么要使用这个答案中的代码(https://stackoverflow.com/a/2006922/7343355)而不是这个:

using (var encryptor = aes.CreateEncryptor())
{
    result = encryptor.TransformFinalBlock(data, 0, data.Length); // Data length is greater than the blocksize
}

虽然TransformFinalBlock应该在之后使用TransformBlock仅在最后一个块上,这段代码以某种方式通过了所有单元测试,并且总是给出正确的结果。有没有可能失败的情况?这和我使用有关系吗ECB密码模式来测试这个并且在其他模式下会失败吗?


之所以CryptoStream is 一般来说首选的是它更普遍适用。它用于通常涉及大量数据的对称加密。出于实际原因(例如限制内存使用),将整个待加密内容和加密输出同时全部存储在内存中可能不切实际。

因此,您可能已经在使用流,例如NetworkStream or FileStream. CryptoStream自然地与这些其他流组合得很好,因此您通常最终会构建一个pipeline(或者可能有两个CopyTo or CopyToAsync弥合“读”侧和“写”侧之间的差距)。

If您所处的位置是,要加密的全部内容很小并且已经在内存中,因此您还能够处理内存中的整个加密输出,那么当然,您可以使用TransformFinalBlock反而。而且您将为自己节省一些对象分配(但我们已经说过,如果我们在这里,内存使用不是问题......),代价是现在必须完全用两个之一编写您的加密代码根据每个用例的不同方式。


Meta bit

不幸的是,我们在问题中得到的玩具示例(“类似......”或实际的 MCVE)看起来像是适合第二种情况。但大多数回答此类问题的人都会认为代码需要处理与第一个更相似的情况,因此他们仍然会提供CryptoStream基于解决方案,即使TransformFinalBlock一个适用于代码在问题中.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 CryptoStream 而不是 TransformBlock? 的相关文章

  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 在 omp 并行 for 循环中使用 unique_ptr 会导致 SEG.FAULT

    采取以下代码 include
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • 如何更新由另一个组合框触发的组合框中的值?

    我的表单中有 2 个组合框 我希望在组合框 2 中的列表更新时更改组合框 1 中的选定值 例如 ComboBox1 包含移动公司的名称 ComboBox2 包含该公司的所有手机列表 假设您有一个将手机型号与其制造商关联起来的字典 Dicti
  • 流星:云中

    我正在尝试上传 Lepozepo cloudinary 的照片 这是我的服务器和客户端配置 server Cloudinary config cloud name api key api secret client cloudinary c
  • UIViewController 的背景到分组表视图颜色

    在 UITableView 分组样式中 表格视图的背景有点像浅灰色的纹理颜色 如何获取该值以便将 UIViewController 的整个背景设置为该颜色 如果您正在为 iPhone 和 iPod touch 进 行开发 UIColor定义
  • 搜索文本文件并插入行

    我想要做的是 以下面的文本为例 在文本文件中搜索字符串 Text2 然后在 Text 2 后两行插入一行 插入文本 文本 2 可以位于文本文件中的任何行 但我知道它会在文本文件中出现一次 所以这是原始文件 Text1 Text2 Text3
  • 从存档导出 ipa 时 Xcode 9 崩溃

    我在 Xcode 9 中为任何项目创建了一个存档 然后我尝试创建一个 ipa 文件 开发文件或临时文件 我首先尝试导出存档 然后我选择 开发 或 临时分发 Xcode 9 崩溃 我什至在应用程序的 info plist 中添加了 编译位码
  • 向函数发送 stderr/stdout 消息并捕获退出信号

    我正在处理错误处理并登录我的 bash 脚本 下面我提供了一个简化的代码片段来举例说明用例 我想在我的脚本中实现以下目标 陷阱退出信号应触发下面代码中的 onexit 函数 stderr 和 stdout 应发送到 log 函数 该函数将确
  • R 中的嵌套 if-else 循环

    我有一个名为 crimes 的数据框 其中包含一个 pre rate 列 表示实施特定法律之前的犯罪率 我想使用嵌套的 if else 循环将每个费率放入 rate category 列中 我有以下代码 crimes rate catego
  • 为什么c++使用memset(addr,0,sizeof(T))来构造一个对象?标准或编译器错误?

    这个问题和我的另一篇文章有 关 为什么 allocate shared 和 make shared 这么慢 在这里我可以更清楚地描述这个问题 考虑下面的代码 struct A char data 0x10000 class C public
  • 在多个 UIView 上添加 Facebook Shimmer

    我正在尝试在具有多个 UIView 的 UICollectionViewCell 上添加 Facebook Shimmer For 一个 UIView 使用下面的代码可以正常工作 let shimmeringView FBShimmerin
  • 执行存储在数据库中的Java代码

    我有定期推送到数据库的 Java 代码 解释它为什么在数据库中太复杂 这只会将焦点从主要问题上移开 在运行时我查询数据库 我可以执行从数据库获取的代码吗 我只将 main 方法的内容存储在代码中 运行数据库的服务器是HTTP 服务器 数据库
  • Apache Flink:Python 流 API 中的 Kafka 连接器,“无法加载用户类”

    我正在尝试 Flink 的新 Python 流 API 并尝试使用以下命令运行我的脚本 flink 1 6 1 bin pyflink stream sh examples read from kafka py python 脚本相当简单
  • Microsoft JScript 运行时错误:对象预期代码 800A13F

    我刚刚开始学习和培训node js 我已经安装了 Node js 版本 2 14 7 64 位 然后 我正在编写代码来制作基本服务器 var sys require sys my http require http my http crea
  • MySQL基于列值的内连接表

    假设我有一个具有以下结构的表 stats tableName id pageViews tableName 列对应于数据库中的单独表 当针对 stats 运行查询时 针对 stats 进行内部联接的最佳方法是什么 tableName列结果来
  • 如何加载独立于数据的 UI

    我正在网络服务器中使用 C 和数据库创建一个应用程序 从网络服务器访问数据时 速度非常慢 并且表单也会挂起 直到加载数据 有没有办法先加载表单 然后再加载数据 解决这个问题的常用方法是使用BackgroundWorker class pub
  • 使用 C#(Mono) 在 Mac 上获取唯一系统 ID

    我使用 Mono 为 Mac 移植一个 Windows 应用程序 我无法在 Mac 中使用 DPAPI 并且我认为在 Mac 中为用户级程序获取主板 CPU id 存在限制 那么 Windows 中是否有类似 DPAPI 的东西我可以使用
  • RequestParam 的自定义验证不适用于 Spring MVC

    我无法使用 Spring MVC 进行自定义验证 我实现了自己的参数注释和自定义验证器 所有内容都在下面给出 但验证从未发生 任何想法将非常感激 控制器 Validated RestController public class FooCo
  • 具有构造函数的类的 C++ 向量

    Using g and ubuntu include
  • 在 PHP 中从图像中裁剪空白

    PHP 中是否可以删除图像周围的空白 注意 澄清一下 我指的是 Photoshop 修剪功能之类的东西 Thanks 要修剪图像中有趣部分周围的所有空白 如您所说 首先我们要找出 空白 停止的位置 然后复制这些边界内的所有内容 load t
  • 如何使用 Nokogiri::XML::Builder 将非转义 & 符号添加到 HTML

    我想使用 Nokogiri 中的 XML 生成器向 HTML 添加诸如项目符号 之类的内容 但所有内容都被转义了 我该如何防止它被逃脱 我希望结果是 span 8226 span 而不是 span amp 8226 span 我只是这样做
  • 为什么使用 CryptoStream 而不是 TransformBlock?

    文档从未真正提及原因CryptoStream应该使用而不是TransformBlock and TransformFinalBlock除此之外 它会自动调用所需的任何一个 因此 为什么要使用这个答案中的代码 https stackoverf