gpt4 book ai didi

c# - ProtectedMemory - 如何保证字节数组的大小是16的倍数?

转载 作者:行者123 更新时间:2023-12-05 06:58:09 26 4
gpt4 key购买 nike

我正在阅读 ProtectedMemory C# 中的类(它使用 Windows 中的数据保护 API (DPAPI)),我看到为了使用类的 Protect() 方法,要加密的数据必须存储在大小/长度为 16 的倍数的字节数组。

我知道如何将许多不同的数据类型转换为字节数组形式,然后再转换回来,但我如何保证字节数组的大小是 16 的倍数?我真的需要创建一个大小为 16 的倍数的数组并使用另一个变量跟踪原始数据的长度,还是我遗漏了什么?使用传统的 block 密码,所有这些细节都会通过填充设置自动为您处理。同样,当我尝试将数据从字节数组转换回其原始形式时,我如何确保忽略任何额外的字节,当然前提是原始数据不是 16 的倍数。

在 .NET Framework 文档中提供的代码示例中,恰好使用的字节数组长度为 16 个字节,因此我不确定与此相关的最佳实践是什么,因此出现了这个问题。

最佳答案

是的,只是为了迭代评论中给出的可能性(并给出这个好问题的答案),您可以使用:

  1. 一种也用于 block 密码模式的填充方法,请参阅 Wikipedia page on the subject 上的所有选项.
  2. 以某种形式为长度加上前缀。 32 位/4 字节的固定大小可能是最简单的。请记下大小的编码类型(无符号、小端可能最适合 C#)。

这两者都已经对字节进行操作,因此如果您使用字符串,则可能需要定义字符编码,例如 UTF-8。

您还可以使用字符串的特定编码,例如一个由 ASN.1/DER 定义,然后执行零填充。这样您甚至可以指示以平台无关方式编码的数据类型。在选择这条路线之前,您可能需要阅读有关受虐狂的内容。

关于c# - ProtectedMemory - 如何保证字节数组的大小是16的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64714224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com