Encryption 如何对明文ASCII或十六进制编码?
如果我有一个十六进制的给定密文(来自CBC模式,带有随机IV和AES)及其ASCII编码的明文,我需要在加密之前将ASCII明文编码为十六进制吗 明文是“付给鲍勃100美元”Encryption 如何对明文ASCII或十六进制编码?,encryption,aes,cbc-mode,Encryption,Aes,Cbc Mode,如果我有一个十六进制的给定密文(来自CBC模式,带有随机IV和AES)及其ASCII编码的明文,我需要在加密之前将ASCII明文编码为十六进制吗 明文是“付给鲍勃100美元” ASCII080 097 121 032 066 111 098 032 036 049 048 048 我得到了密码文本20814804c1767293b99f1d9cab3bc3e7 ac1e37bfb15599e5f40eef805488281d不,您不必创建明文的十六进制表示形式 您将从一个文本开始,它很可能是应用
ASCII
080 097 121 032 066 111 098 032 036 049 048 048
我得到了密码文本
20814804c1767293b99f1d9cab3bc3e7 ac1e37bfb15599e5f40eef805488281d
不,您不必创建明文的十六进制表示形式
您将从一个文本开始,它很可能是应用程序中的一个字符串。此字符串可能还没有默认的字符编码,如ASCII或UTF-16LE。如果没有默认编码,则需要将明文编码为字节(也称为字节数组或八位字节字符串)。UTF-8是当今应用最广泛的字符编码
为了让这更有趣一点,大多数IDE和调试器在查看字节时都将其显示为十六进制。这只是内存中字节值的一种表示形式-字节在内存中不是以十六进制编码的,您只需将它们视为十六进制
现代密码采用明文字节并将其转换为密文字节。如果您得到一个字符串,那么API有一个默认的编码方法包含在算法中(例如,已知PHP会自动编码)。这是API的一部分,而不是密码本身
同样,如果密文不是自动编码的,那么您可能需要自己对字节进行编码。您可以使用十六进制(因为您可以很容易地看到密文的大小,所以调试更容易)或更高效的Base64编码。但是,只有在需要字符串而不是字节形式的密文时,才需要进行编码。您确实需要字符串的一个示例是XML,因为它是一种文本格式(其中密文通常位于
CDATA
部分)。对于大多数(甚至可能是所有)实现,答案是是。实际上,您不会转换为十六进制
,但字符串中的每个字符都应该转换为字节
。这是一个纯文本字符串
被转换成字节数组
,但我想问你的问题是:目的是什么?加密明文以获得准确的密文?要做到这一点,你需要知道IV。为什么同时使用密文和明文还有其他目的吗?不清楚你在问什么。AES CBC在字节块上工作。它不在乎这些字节代表什么:十六进制数字或ASCII编码。因此,如果您正在谈论加密例程的输入,那么您不必对任何内容进行编码。谢谢您的回复!我有一个用于明文的CT,它是消息“Pay Bob$100”的ASCII编码。我需要计算消息“付给鲍勃500美元”的密码文本。我以为IV应该是密文的前16个字节(使用AES)?我只是弄不清楚我是先将“Pay Bob$100”直接编码成十六进制,还是将ASCII版本的明文编码成十六进制。那么,我应该把“付给鲍勃100美元”放在一个十六进制转换器里,还是把“080 097 121 032 066 111 098 032 036 049 048 048”放在一个十六进制转换器里。(字符串)->字符编码->(字节)->加密->(字节)->十六进制编码->(字符串)->“发送”->“接收”->(字符串)->十六进制解码->(字节)->解密->(字符串)。Coursera作业:)