Linux 使用openssl和dmsetup在CBC模式下使用AES加密的垃圾字符

Linux 使用openssl和dmsetup在CBC模式下使用AES加密的垃圾字符,linux,encryption,openssl,cryptography,aes,Linux,Encryption,Openssl,Cryptography,Aes,我有个奇怪的问题。 我用字母“a”填充了一个文本文件,使其长度为4096字节。 然后在linux上使用openssl对其进行加密: KEY="2D242B65C517B72F8D1DAA8278CA5A2ED5D8A95BCF82BFD3778212218726335F" openssl enc -nosalt -iv 0 -K $KEY -aes-256-cbc -in $PLAINIMAGENAME -out $CRYPTIMAGENAME KEY=“2D242B65C517B72F8D1

我有个奇怪的问题。 我用字母“a”填充了一个文本文件,使其长度为4096字节。 然后在linux上使用openssl对其进行加密:

KEY="2D242B65C517B72F8D1DAA8278CA5A2ED5D8A95BCF82BFD3778212218726335F" openssl enc -nosalt -iv 0 -K $KEY -aes-256-cbc -in $PLAINIMAGENAME -out $CRYPTIMAGENAME KEY=“2D242B65C517B72F8D1DAA8278CA5A2ED5D8A95BCF82BFD378212218726335F” openssl enc-nosalt-iv 0-K$KEY-aes-256-cbc-in$PLAINIMAGENAME-out$CRYPTIMAGENAME (不含盐,不含IV)

然后,尝试使用dm crypt创建设备映射器环回设备:

losetup /dev/loop0 $CRYPTIMAGENAME sudo dmsetup create cryptotest --table "0 4096 crypt aes-cbc-null $KEY 0 /dev/loop0 0" losetup/dev/loop0$CRYPTIMAGENAME sudo dmsetup create cryptotest--表“0 4096 crypt aes cbc null$KEY 0/dev/loop0” 当我尝试读取/dev/mapper/cryptotest时,我得到了A,但每512字节(块大小?)就有16字节的垃圾。这怎么可能

当我使用ECB模式(每个块都以相同的方式加密)时,一切正常


顺便说一句,我不想使用LUKS进行环回加密,我需要一个无头AES流,它可以通过openssl或aespipe创建。

我找到了问题的解决方案:

设备映射器需要在每个扇区(512字节==32个AES块)启动一个新的CBC,以便能够随机访问扇区,而不必在此之前解密所有内容。因此,我必须连接长度为512的aes-128-cbc加密流。 当然,零的IV一点也不好。我现在使用aes-128-cbc-essiv:sha256。ESSIV是使用加密密钥和扇区号的散列(sha256)计算的,因此没有扇区具有相同的加密数据


更多信息可在此处找到:

我找到了问题的解决方案:

设备映射器需要在每个扇区(512字节==32个AES块)启动一个新的CBC,以便能够随机访问扇区,而不必在此之前解密所有内容。因此,我必须连接长度为512的aes-128-cbc加密流。 当然,零的IV一点也不好。我现在使用aes-128-cbc-essiv:sha256。ESSIV是使用加密密钥和扇区号的散列(sha256)计算的,因此没有扇区具有相同的加密数据


更多信息可以在这里找到:

这是填充:注意AES块大小是16字节。我相信dm crypt使用CBC模式,没有填充。这是因为磁盘扇区的大小是固定的,并且总是块大小的倍数。我觉得ECB和CBC模式都用来解密数据块很奇怪。这是填充:注意AES数据块大小是16字节。我相信dm crypt使用CBC模式,没有填充。这是因为磁盘扇区的大小是固定的,并且总是块大小的倍数。我发现ECB和CBC模式解密数据块很奇怪。对于加密磁盘扇区,请看。对于加密磁盘扇区,请看。