我遇到了一个奇怪的问题。 我用字母'A'填充了一个文本文件,并将其长度设置为4096个字节。 然后,使用OpenSSL加密它在Linux:在CBC模式下使用openssl和dmsetup进行AES加密的垃圾文件
KEY="2D242B65C517B72F8D1DAA8278CA5A2ED5D8A95BCF82BFD3778212218726335F" openssl enc -nosalt -iv 0 -K $KEY -aes-256-cbc -in $PLAINIMAGENAME -out $CRYPTIMAGENAME
(无盐,无IV)
然后,试图建立与DM-隐窝一个设备映射器回送设备:
losetup /dev/loop0 $CRYPTIMAGENAME sudo dmsetup create cryptotest --table "0 4096 crypt aes-cbc-null $KEY 0 /dev/loop0 0"
当我尝试从/ dev/mapper/cryptotest读取时,得到我的A,但每512字节(块大小?)有16个字节的垃圾。这怎么可能?
当我使用ECB模式(每块都以相同的方式加密)时,一切正常。顺便说一下,我不想使用LUKS进行环回加密,我需要一个无标题的AES流,它可以由openssl或aespipe创建。
这是填充:https://en.wikipedia.org/wiki/Padding_(cryptography) –
注意,AES的块大小是16个字节。 – zaph
我相信dm-crypt使用不带填充的CBC模式。这是因为磁盘扇区是固定大小,并且总是块大小的倍数。 ECB和CBC模式都可以解密块,我感到很奇怪。 – jww