我有一个使用AES加密的字节数组,使用SHA-256加密密码短语。 一切都很完美,但我想知道最后一部分,我必须编码由于加密而得到的字节数组。 是否重要,因为最终结果的字符串数据是如何加密的,Base64,转换为十六进制值,还是其他什么?
从逻辑上讲,它没关系,因为实际上没有那么多的编码方法,并且大多数时候使用最明显的编码方法Base64。 但由于我不熟悉加密技术,我只想确定。
以字节数组为例(以字节的随机数组为例):
ou+yUEkilfrGIF3HBH08vu8A==
这在Base64中给出了可能的结果(随机结果,上面不匹配):
A2EBCA1945E8BC920532F068D27BAEF1
使用BitConvertor将其转换为十六进制值给出(随机结果,上面不匹配):
{{1}}
将上述结果转换回相应的字节数组很简单,然后才开始使用硬件。
答案 0 :(得分:6)
重要的是,最终结果的可靠性如何加密字节数组,Base64,转换为十六进制值,还有其他什么?
不,一点也不。只要你以无损格式(base64和hex都是)编码它就可以了。 不要使用像Encoding.ASCII.GetString(...)
这样的东西 - 这将是有损和不合适的。 (根本不要使用Encoding
完成此任务。)
只要问问自己是否可以改变编码并恢复原始字节 - 如果是这样,你就可以了。 (对于hex和base64来说,这是正确的,假设它已正确实现。)
答案 1 :(得分:1)
以这种方式看待它。密码必须产生密文,从中不可能(实际上)在不知道密钥的情况下获得纯文本:
- crash with -[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x7fde53d2f700
现在,你所拥有的是密文。无论你是在Base64中编码它还是什么都没关系,因为密码在生成密文时已经完成了它的工作。之后你可以用它做任何事情 - 密码在生成密文时已经完成了它的工作,它告诉你如果你不使用原始密钥,就不可能检索纯文本。
所以无论你事后做什么,例如如何编码/解码密文,应该不重要。