PKCS7
По PKCS7 сообщение m длины b дополняется до длины N следующим образом:
1) m = "hello", b = 5, N = 7 => получим M* = "hello\x02\x02"
2) m = "hello", b = 5, N = 8 => M* = "hello\x03\x03\x03".
То есть в каждый байт, который был дополнен записывается общее число добавленных байтов. Как проверить является ли корректным дополнение до требуемой длины и получить исходное сообщение? Например, есть сообщение:
m = "Hello\x01". Как определяется \x01 относится к m или же это результат дополнения?
комментариев: 1060 документов: 16 редакций: 32
комментариев: 1060 документов: 16 редакций: 32
Нет, в этом случае требуется сделать дополнение на размер блока используемого симметричного алгоритма, т.е. 8 или 16 байт на практике.
комментариев: 1060 документов: 16 редакций: 32
Дополнение требуется всегда. Именно для предотвращения таких случаев неоднозначности.
"hello\0x03\0x03\0x03" -> "hello"
"hello\0x03\0x03\0x03\0x08\0x08\0x08\0x08\0x08\0x08\0x08\0x08" -> "hello\0x03\0x03\0x03"