Насколько все это совместимо с предыдущей версией, особенно в плане работы с парами ключей?
Этот топик читают: Гость
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
EnCrypt/DeCrypt никак не связаны с остальными компонентами криптографии и совместимы со своими предыдущими версиями. Остальные компоненты никак не затронуты, поскольку в MSCryptoAPI.pas были только добавлены функции, существующие не изменились.
Я тут на выходных глянул в свой старый код - можно вообще не заморачиваться с подстановкой имени провайдера в CryptAcquireContext(). Если поставить nil, система сама выберет провайдер по-умолчанию нужного типа (фактически как я сделал для поиска имени MS_ENH_RSA_AES_PROV в MSCryptoAPI.CheckProvider()). Меня удивила необходимость делать хеш пароля для создания хендла ключа. Существует возможность импортировать plaintext-пароль. Может быть полезно для совместимости с сторонними программами. Можно также добавить событие onProgress при шифровании файлов и стримов, и соответственно, метод doAbort для прерывания операции. По поводу компонентов асимметричной криптографии - как по мне, несколько сложно для понимания и неудобно реализовано, но пока не могу ничего готового предложить. |
|||
карма: 26 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Обновил архив - добавил метод doAbort и событие onProgress.
Crypt components mod 2018-05-04 upd.zip (поправлено) Редактировалось 1 раз(а), последний 2018-05-07 12:28:03 |
|||
карма: 26 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Netspirit писал(а): Обновил архив - добавил метод doAbort и событие onProgress. Я все же подожду окончательной реализации. Вдруг, ты еще чего там придумаешь. Я уже тоже один баг нарыл в компоненте энумератора контейнеров ключей. Да, кстати, чем лучше goto finish секции FINALLY...END? Редактировалось 2 раз(а), последний 2018-05-04 12:36:02 |
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
nesco писал(а): Да, кстати, чем лучше goto finish секции FINALLY...END? |
|||
карма: 26 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Netspirit писал(а): try..finally/except нужен тогда, когда вложенный код сообщает об ошибках путём raise ExceptionДяя данного применения, КМК, это избыточно, тк я применял finally в основном для гарантированной очистки ресурсов, те практически ничем не отличается от твоего goto. |
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Но я то применяю goto в отсутствие Exception, в качестве средства против дублирования кода, когда мне нужно выполнить одинаковый код в разных местах и прекратить дальнейшее исполнение. Вместо goto можно применять вложенные if, но это как кому нравится.
Редактировалось 1 раз(а), последний 2018-05-04 15:54:13 |
|||
карма: 26 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Обновил архив - сделал ещё одну поправку. Вроде пока больше нечего сюда добавить.
Crypt components mod 2018-05-04 upd.zip |
|||
карма: 26 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
Добавлено на SVN
|
|||
карма: 22 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Замечено такое на RC4:
2. Расшифровываем с другим паролем - получаем набор символов. 3. Шифруем этот набор снова с первым паролем - получаем другой набор символов. 4. Расшифровываем его с паролем из п.2 - получаем исходный текст. Т.е. получив зашифрованный текст и программу для зашифровки, даже не зная пароля (допустим, он внутри неё зашит), с помощью этого алгоритма расшифровываем текст. Баг Особенность На другим алгоритмах не замечено (там при неправильном пароле просто выдаёт пустую строку). |
|||
карма: 9 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
3042 писал(а): Баг Ну, если это баг, то баг провайдера, а провайдер всей этой криптографии мелкомягкие. |
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
"Мелкомягкие" ни при чем. Это сам алгоритм такой - на основе простого 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 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Ясненько
|
|||
карма: 9 |
|
28