ProtectedMemory - 如何保证字节数组的大小是16的倍数?
ProtectedMemory - How To Ensure That The Size Of The Byte Array Is A Multiple Of 16?
我正在阅读 C# 中的 ProtectedMemory class(它使用 Windows 中的数据保护 API (DPAPI))我看到为了使用 class 的 Protect()
方法,要加密的数据必须存储在字节数组中,其 size/length 是 16 的倍数。
我知道如何将许多不同的数据类型转换成字节数组形式,然后再转换回来,但我如何保证字节数组的大小是 16 的倍数?我真的需要创建一个大小为 16 的倍数的数组并使用另一个变量跟踪原始数据的长度,还是我遗漏了什么?使用传统的块密码,所有这些细节都会通过填充设置自动为您处理。同样,当我尝试将数据从字节数组转换回其原始形式时,我如何确保忽略任何其他字节,当然假设原始数据不是 16 的倍数。
在 .NET Framework 文档中提供的代码示例中,恰好使用的字节数组长度为 16 个字节,因此我不确定与此相关的最佳实践是什么,因此出现了这个问题。
是的,只是为了迭代评论中给出的可能性(并回答这个好问题),您可以使用:
- 一种也用于块密码模式的填充方法,请参阅 Wikipedia page on the subject 上的所有选项。
- 以某种形式为长度加上前缀。 32 位/4 字节的固定大小可能是最简单的。请记下大小的编码类型(无符号、小端可能最适合 C#)。
这两个都已经对字节进行操作,因此如果您使用字符串,则可能需要定义字符编码,例如 UTF-8。
您还可以使用字符串的特定编码,例如一个由 ASN.1 / DER 定义,然后执行零填充。这样您甚至可以指示以平台无关方式编码的数据类型。在走这条路之前,您可能想阅读有关受虐狂的内容。
我正在阅读 C# 中的 ProtectedMemory class(它使用 Windows 中的数据保护 API (DPAPI))我看到为了使用 class 的 Protect()
方法,要加密的数据必须存储在字节数组中,其 size/length 是 16 的倍数。
我知道如何将许多不同的数据类型转换成字节数组形式,然后再转换回来,但我如何保证字节数组的大小是 16 的倍数?我真的需要创建一个大小为 16 的倍数的数组并使用另一个变量跟踪原始数据的长度,还是我遗漏了什么?使用传统的块密码,所有这些细节都会通过填充设置自动为您处理。同样,当我尝试将数据从字节数组转换回其原始形式时,我如何确保忽略任何其他字节,当然假设原始数据不是 16 的倍数。
在 .NET Framework 文档中提供的代码示例中,恰好使用的字节数组长度为 16 个字节,因此我不确定与此相关的最佳实践是什么,因此出现了这个问题。
是的,只是为了迭代评论中给出的可能性(并回答这个好问题),您可以使用:
- 一种也用于块密码模式的填充方法,请参阅 Wikipedia page on the subject 上的所有选项。
- 以某种形式为长度加上前缀。 32 位/4 字节的固定大小可能是最简单的。请记下大小的编码类型(无符号、小端可能最适合 C#)。
这两个都已经对字节进行操作,因此如果您使用字符串,则可能需要定义字符编码,例如 UTF-8。
您还可以使用字符串的特定编码,例如一个由 ASN.1 / DER 定义,然后执行零填充。这样您甚至可以指示以平台无关方式编码的数据类型。在走这条路之前,您可能想阅读有关受虐狂的内容。