Как я могу расшифровать шифр с середины? - PullRequest
1 голос
/ 06 марта 2009

Я должен зашифровать выходной файл в приложении A, затем расшифровать его в приложении B, но я обнаружил, что есть некоторые ограничения с шифрованием MS, если я шифрую буфер 1000 байтов, а затем хочу расшифровать запуск для другой позиции с другим Размер в приложении B, возвращаемые значения являются ошибкой. Есть ли какое-либо шифрование может удовлетворить мои требования? Благодарю. Вот мои примеры кодов:

clTemp.EncryptDataDirectly(buffer, 1000);
clTemp.DecryptDataDirectly(buffer + 1, 500);

Ответы [ 5 ]

3 голосов
/ 06 марта 2009

Отказ от ответственности: я не знаю этого Windows API для шифрования. Так что это просто общий план проблемы. Используйте ваш здравый смысл и документацию, чтобы узнать больше.

Есть две возможности:

  1. Поток-шифры. Они зашифровывают один байт (или, может быть, даже бит) за раз, и вы должны начать с начала зашифрованного потока, чтобы правильно его расшифровать. Некоторые шифры имеют возможности синхронизации, которые помогают вам восстановиться после небольшой ошибки в передаче.

  2. Блок-шифры. Они шифруют блоки фиксированного размера, 64 или 128 бит являются популярными размерами блоков. Но они могут использовать разные режимы для шифрования. Например, ECB шифрует каждый блок отдельно. Вы можете прыгнуть в середину вашего файла, захватить блок и расшифровать его. Но это оставляет вас открытыми для известных атак открытого текста, когда злоумышленник знает какой-то зашифрованный текст и пытается найти ключ, который вы использовали. CBC или другой режим с обратной связью более безопасен, но в этом случае вам нужно снова начать расшифровку в начале вашего зашифрованного файла.

Вот некоторые соответствующие статьи Википедии:

1 голос
/ 06 марта 2009

Одним из решений является использование шифра с режимом блокировки CTR (счетчик). Это позволяет произвольный доступ во время расшифровки; блоки не зависят друг от друга, вам нужно знать только ключ и номер блока.

Подробнее см. википедии .

0 голосов
/ 06 марта 2009

Вы можете попробовать использовать алгоритм блочного шифрования, который можно использовать в режиме электронной кодовой книги (ECB), это означает, что шифрование каждого блока не зависит от шифрования его предшественника. Это позволяет вам начинать дешифрование в любой точке буфера, если вы начинаете с начала блока кода, а не внутри блока кода.

Например, вы выбрали алгоритм шифрования DES, размер блока которого составляет 64 бита. Таким образом, вы должны расшифровать свой шифр с тем же размером блока, что и для шифрования открытого текста. Но вам не нужно начинать начало своего шифра, вы также можете начинать с каждой точки, кратной 64.

Возможно, это может помочь вам.

Дополнительная информация о блочном шифре:

Блочный шифр

Режимы блочного шифрования

Шифр ​​Цезаря (это не блочный чип)

0 голосов
/ 06 марта 2009

Большинство алгоритмов шифрования данных представляют собой блочный шифр , который шифрует один фрагмент за раз, например 128 бит.

Чтобы сделать блочный шифр безопасным, большинство людей инициализируют шифрование второго блока на основе вывода первой надписи, который называется Cipher Block Chaining или CBC. Используя режим электронного кодового блока (ECB), вы можете отключить цепочку и зашифровать один блок за раз, но при этом потеряете некоторую сложность.

Вот пример того, почему ECB не так безопасен :

Original
(источник: wikimedia.org )
Tux ECB Tux chaining

Второе изображение зашифровано с использованием ECB, последнее зашифровано с использованием цепочки.

0 голосов
/ 06 марта 2009

Вы хотите что-то зашифровать, а затем расшифровать только часть? не с самого начала? я правильно понял?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...