Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26061
Рейтинг: 2120
#16: 2018-04-27 21:05:11 ЛС | профиль | цитата
Насколько все это совместимо с предыдущей версией, особенно в плане работы с парами ключей?
карма: 22

0
Ответов: 4621
Рейтинг: 746
#17: 2018-05-02 11:02:58 ЛС | профиль | цитата
EnCrypt/DeCrypt никак не связаны с остальными компонентами криптографии и совместимы со своими предыдущими версиями. Остальные компоненты никак не затронуты, поскольку в MSCryptoAPI.pas были только добавлены функции, существующие не изменились.
Я тут на выходных глянул в свой старый код - можно вообще не заморачиваться с подстановкой имени провайдера в CryptAcquireContext(). Если поставить nil, система сама выберет провайдер по-умолчанию нужного типа (фактически как я сделал для поиска имени MS_ENH_RSA_AES_PROV в MSCryptoAPI.CheckProvider()).

Меня удивила необходимость делать хеш пароля для создания хендла ключа. Существует возможность импортировать plaintext-пароль. Может быть полезно для совместимости с сторонними программами. Можно также добавить событие onProgress при шифровании файлов и стримов, и соответственно, метод doAbort для прерывания операции.

По поводу компонентов асимметричной криптографии - как по мне, несколько сложно для понимания и неудобно реализовано, но пока не могу ничего готового предложить.
карма: 26

0
Ответов: 4621
Рейтинг: 746
#18: 2018-05-04 11:29:13 ЛС | профиль | цитата
Обновил архив - добавил метод doAbort и событие onProgress.

Crypt components mod 2018-05-04 upd.zip (поправлено)

Редактировалось 1 раз(а), последний 2018-05-07 12:28:03
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#19: 2018-05-04 12:29:47 ЛС | профиль | цитата
Netspirit писал(а):
Обновил архив - добавил метод doAbort и событие onProgress.

Я все же подожду окончательной реализации. Вдруг, ты еще чего там придумаешь. Я уже тоже один баг нарыл в компоненте энумератора контейнеров ключей.
Да, кстати, чем лучше goto finish секции FINALLY...END?

Редактировалось 2 раз(а), последний 2018-05-04 12:36:02
карма: 22

0
Ответов: 4621
Рейтинг: 746
#20: 2018-05-04 12:42:33 ЛС | профиль | цитата
nesco писал(а):
Да, кстати, чем лучше goto finish секции FINALLY...END?
try..finally/except нужен тогда, когда вложенный код сообщает об ошибках путём raise Exception. Windows API так не делает - ошибки определяются по кодам возврата функций, тогда достаточно качественно обрабатывать эти коды. Функция Windows может упасть, например, если ей для записи подсунуть указатель на буфер только для чтения (или невалидный указатель) - но это ошибка вызывающего кода, которую лучше предотвратить, чем страховаться try..except при каждом вызове.
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#21: 2018-05-04 13:02:37 ЛС | профиль | цитата
Netspirit писал(а):
try..finally/except нужен тогда, когда вложенный код сообщает об ошибках путём raise Exception

Дяя данного применения, КМК, это избыточно, тк я применял finally в основном для гарантированной очистки ресурсов, те практически ничем не отличается от твоего goto.
карма: 22

0
Ответов: 4621
Рейтинг: 746
#22: 2018-05-04 13:27:04 ЛС | профиль | цитата
Но я то применяю goto в отсутствие Exception, в качестве средства против дублирования кода, когда мне нужно выполнить одинаковый код в разных местах и прекратить дальнейшее исполнение. Вместо goto можно применять вложенные if, но это как кому нравится.

Редактировалось 1 раз(а), последний 2018-05-04 15:54:13
карма: 26

0
Ответов: 4621
Рейтинг: 746
#23: 2018-05-07 12:30:26 ЛС | профиль | цитата
Обновил архив - сделал ещё одну поправку. Вроде пока больше нечего сюда добавить.

Crypt components mod 2018-05-04 upd.zip
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#24: 2018-05-07 13:33:08 ЛС | профиль | цитата
Добавлено на SVN
карма: 22

0
Ответов: 1925
Рейтинг: 172
#25: 2019-10-23 15:49:02 ЛС | профиль | цитата
Замечено такое на RC4:

Add(Edit,5547663,266,182)
{
Left=80
Top=30
Width=245
Text="йцукенгшщзхъфывапролджэячсмитьбю."
link(onEnter,11208462:doEncrypt,[])
}
Add(Edit,4724168,378,189)
{
Left=80
Top=50
Width=245
Text=""
link(onEnter,5688958:doDecrypt,[])
}
Add(EnCrypt,11208462,322,189)
{
Mode=1
Key="123"
link(onEncrypt,4724168:doText,[])
}
Add(DeCrypt,5688958,427,196)
{
Mode=1
Key="456"
link(onDecrypt,5547663:doText,[(471,202)(471,171)(253,171)(253,188)])
}
1. Шифруем любой текст с любым паролем.
2. Расшифровываем с другим паролем - получаем набор символов.
3. Шифруем этот набор снова с первым паролем - получаем другой набор символов.
4. Расшифровываем его с паролем из п.2 - получаем исходный текст.

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

На другим алгоритмах не замечено (там при неправильном пароле просто выдаёт пустую строку).
карма: 9
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#26: 2019-10-23 16:03:34 ЛС | профиль | цитата
3042 писал(а):
Баг

Ну, если это баг, то баг провайдера, а провайдер всей этой криптографии мелкомягкие.
карма: 22

0
Ответов: 4621
Рейтинг: 746
#27: 2019-10-23 16:32:45 ЛС | профиль | цитата
"Мелкомягкие" ни при чем. Это сам алгоритм такой - на основе простого XOR. В нём дешифрование - аналогично повторному применению функции шифрования. Если шифрованный текст ещё раз зашифровать тем же паролем - получим расшифрованный текст:
A xor B = C
C xor B = A

Тогда описанная тобой последовательность:

- зашифровать паролем 1: A xor PW1 = B
- расшифровать паролем 2: B xor PW2 = (A xor PW1) xor PW2 = C
- зашифровать паролем 1: C xor PW1 = ((A xor PW1) xor PW2) xor PW1 = A xor PW2 = D
- расшифровать паролем 2: D xor PW2 = (A xor PW2) xor PW2 = A

Слова "зашифровать" и "расшифровать" можно менять произвольно.

Редактировалось 1 раз(а), последний 2019-10-23 16:33:18
карма: 26

0
Ответов: 1925
Рейтинг: 172
#28: 2019-10-23 16:42:21 ЛС | профиль | цитата
Ясненько
карма: 9
0
28
Сообщение
...
Прикрепленные файлы
(файлы не залиты)