如何编码纯文本ASCII或十六进制?

时间:2014-05-12 13:21:03

标签: encryption aes cbc-mode

如果我有一个给定的密文(来自带有AES的随机IV的CBC模式),它是十六进制的并且它的明文是ASCII编码的,我是否需要在加密之前将该ASCII明文编码为十六进制?

明文是"Pay Bob $100"
ASCII 080 097 121 032 066 111 098 032 036 049 048 048

我收到了密文20814804c1767293b99f1d9cab3bc3e7 ac1e37bfb15599e5f40eef805488281d

1 个答案:

答案 0 :(得分:1)

不,您不必创建明文的十六进制表示。

您开始使用文本,这可能是您应用程序中的字符串。此字符串可能还没有默认的字符编码,例如ASCII或UTF-16LE。如果没有默认编码,则需要将明文编码为字节(也称为字节数组或八位字符串)。 UTF-8是目前使用最广泛的字符编码。

为了使这更有趣,大多数IDE和调试器在您查看它们时将字节显示为十六进制。这只是内存中字节值的表示 - 字节在内存中不会被编码为十六进制,您只需将它们视为原样。

现代密码采用明文字节并将其转换为密文字节。如果你找回一个字符串,那么API有一个算法包含的默认编码方法(例如PHP已知自动编码)。这是API的一部分,而不是密码本身。

同样,如果密文没有自动编码,那么可能必须自己编码字节。您可以使用十六进制 - 更容易调试,因为您可以轻松查看密文的大小 - 或更高效的Base64编码。但是,如果需要字符串中的密文而不是字节,则只需编码。您需要字符串的一个示例是XML,因为它是一种文本格式(密文通常在CDATA部分内)。