在 C# 中对字节数组进行编码对于 AES 的安全性是否重要?
本文关键字:安全性 AES 是否 字节 字节数 数组 编码 | 更新日期: 2023-09-27 18:32:12
我有一个使用 AES 加密的字节数组,密码短语使用 SHA-256 加密。一切都很完美,但我想知道最后一部分,我必须对由于加密而获得的字节数组进行编码。为了最终结果的健壮性,字节数组如何加密、Base64、转换为十六进制值,还有其他东西,这是否重要?
从逻辑上讲,这并不重要,因为实际上没有那么多编码方法,而且大多数时候使用最明显的编码方法Base64。但由于我对密码学不是那么精通,我只想确定一下。
以字节数组为例(以随机字节数组为例):
[0] 182
[1] 238
[2] 54
[3] 24
[4] 69
[5] 224
[6] 105
[7] 13
[8] 5
[9] 52
[10]112
[11]71
[12]250
[13]163
[14]234
[15]234
这给出了 Base64 中可能的结果(随机结果,与上面不匹配):
ou+yUEkilfrGIF3HBH08vu8A==
使用BitConvertor将其转换为十六进制值得到(随机结果,与上面不匹配):
A2EBCA1945E8BC920532F068D27BAEF1
将上述结果转换回相应的字节数组很简单,然后才开始困难部分。
为了最终结果的健壮性,字节数组如何加密、Base64、转换为十六进制值,还有其他东西,这是否重要?
不,一点也不。只要您以无损格式(base64 和 hex 都是)对其进行编码,就可以了。不要使用类似Encoding.ASCII.GetString(...)
的东西 - 那将是有损和不合适的。(不要将Encoding
用于此任务。
只要问问自己是否可以反转编码并返回到原始字节 - 如果是这样,你没事。(对于十六进制和base64也是如此,假设它已正确实现。
看。密码必须产生密文,在不知道密钥的情况下(实际上)不可能从中获取明文:
C=E(K,M) // K is key, M message
现在,您拥有的是密文。无论你是在 Base64 中编码还是其他东西并不重要,因为密码在生成密文时已经完成了它的工作。之后你可以用它做任何事情 - 密码在生成密文时已经完成了它的工作,它告诉你如果你不使用原始密钥,就不可能检索纯文本。
因此,无论您之后做什么,例如如何编码/解码密文,都无关紧要。