我有一个字节数组,使用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
Run Code Online (Sandbox Code Playgroud)
这给出了Base64中的可能结果(随机结果,上面不匹配):
ou+yUEkilfrGIF3HBH08vu8A==
Run Code Online (Sandbox Code Playgroud)
使用BitConvertor将其转换为十六进制值给出(随机结果,上面不匹配):
A2EBCA1945E8BC920532F068D27BAEF1
Run Code Online (Sandbox Code Playgroud)
将上述结果转换回相应的字节数组很简单,然后才开始执行硬部分.
重要的是,最终结果的稳健性如何加密字节数组,Base64,转换为十六进制值,还有其他什么?
一点都不.只要你以无损格式(base64和hex都是)编码就可以了.不要使用类似的东西Encoding.ASCII.GetString(...)- 这将是有损和不合适的.(完全不要Encoding用于此任务.)
只要问问自己是否可以反转编码并恢复原始字节 - 如果是这样,你就没事了.(对于hex和base64来说,这是正确的,假设它已正确实现.)