AES的安全性如何解决字节数组在C#中编码的问题?

rea*_*que 2 c# aes

我有一个字节数组,使用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)

将上述结果转换回相应的字节数组很简单,然后才开始执行硬部分.

Jon*_*eet 6

重要的是,最终结果的稳健性如何加密字节数组,Base64,转换为十六进制值,还有其他什么?

一点都不.只要你以无损格式(base64和hex都是)编码就可以了.不要使用类似的东西Encoding.ASCII.GetString(...)- 这将是有损和不合适的.(完全不要Encoding用于此任务.)

只要问问自己是否可以反转编码并恢复原始字节 - 如果是这样,你就没事了.(对于hex和base64来说,这是正确的,假设它已正确实现.)