Если вы используете режим цепочки CBC и можете сделать так, чтобы ваши входные данные имели длину, кратную размеру блока (то есть, кратную восьми, если выражено в байтах, если блочный шифр - 3DES), тогда вам просто нужно удалить последний блок зашифрованного вывода.
При шифровании CBC входные данные ( m ) сначала добавляются в сообщение, длина которого кратна размеру блока (с PKCS # 5, путем добавления между 1 и b байтов, где b - длина блока, b = 8 для 3DES); затем он разбивается на последовательные b -байтовые блоки. Каждый из этих блоков дает зашифрованный блок одинакового размера: зашифрованный блок для блока сообщений i является результатом 3DES, примененного к битовому XOR блока сообщений i и зашифрованному блоку я-1 . Следовательно, если исходное сообщение m имеет длину, кратную b , то заполнение PKCS # 5 добавляет b байтов, то есть полный блок. Удалив последний зашифрованный блок, вы получите то, что получили бы без заполнения вообще.
Расшифровка может быть сложнее. Если API RIM ориентирован на поток (если он может дать вам несколько байтов открытого текста перед тем, как получить целое сообщение), то вы можете передать ему нулевые завершающие байты, пока он не вернет вам все ваше сообщение (дополнительные нулевые байты будут расшифрованы в чистый случайный ищите барахло, просто откажитесь от него). Если RIM API ориентирован на сообщения, вам придется использовать свои знания секретного ключа, чтобы восстановить действительный «последний блок» (тот, который был удален во время шифрования). А именно, в 3DES это будет означать следующее: если z является последним зашифрованным блоком сообщения (без "заполнения"), то вы шифруете пустое сообщение ( без байта) с тем же ключом, используя z в качестве «начального значения» (IV). Это должно привести к одному b -байтовому блоку, который вы просто добавляете к зашифрованному сообщению. Эффект этого дополнительного блока состоит в том, что механизм дешифрования «увидит» надлежащий отступ PKCS # 5 и прозрачно удалит его, получив ожидаемые данные.
Все вышеперечисленное предполагает, что вы используете CBC , который является наиболее распространенным режимом цепочки среди тех, которые требуют заполнения.