|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Привет. Помогите плиз. Я совсем на нуле по знаниям, насчет различных методов хэширования и цифровой подписи. А стоит задача написать прогу, которая сможет подписать файл по заданному сертификату. Но первичная задача - это проверить подпись ! Для этого мне предоставили файл с текстом и файл с цифровой подписью. В системе установлен сертификат, которым создавалась подпись. Имеется файл, который нужно подписать (важна ли кодировка файла ?). Нашел довольно много ссылок в интернете, но не могу заставить их работать. Голова просто кругом идет. Приватный ключ, Публичный ключ... Код: c# 1. 2. 3. 4.
Просто взрыв мозга ! Подскажите пожалуйста, как же нужно ? После двух дней гуглинга, написал такой код, который не работает (ну надо же...): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
На очереди попытка написать код, с использованием RSAPKCS1SignatureFormatter...Скорее всего тоже ничего не выйдет (сложно собирать ядерный реактор не зная ядерной физики и не имея схем/инструкций). Друзья. Помогите плиз. Наверняка существуют простые функции, которые просто берут набор байтов (или файл на диске), сертификат из хранилища - и на выходе создают подпись (и проверяют ее)... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 15:37 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
РостигайДля этого мне предоставили файл с текстом и файл с цифровой подписью. А вам сообщили, с помощью какого алгоритма была создана ЭЦП? И вы уверены, что сертификат, который у вас в системе, точно подходит для проверки подписи? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 15:52 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Ну и здесь посмотрите: http://www.fryan0911.com/2009/04/c-how-to-sign-and-verify-digital.html ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:06 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Я видел как эта строка кодируется сторонней утилитой, так, что знаю каким алгоритмом. Использовалось: Криптопровайдер: "Microsoft base Cryptographic Provider v1.0" Алгоритм: "CALG_SHA (322772)" Хранилище сертификатов: "My = Личные". Только не понял, как мне тоже передавать "Microsoft base Cryptographic Provider v1.0". Я вроде тоже использую SHA: Код: c# 1.
ps. В коде выше оказывается опечатка... Там написано Код: c# 1.
Но сейчас заменил на правильную.... Результа все равно false. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:08 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Извиняюсь. Ваш вопрос поставил меня в тупик. Что означает "вы уверены, что сертификат, который у вас в системе, точно подходит для проверки подписи" ? Разве операция проверки подписи по сертификату не с каждым сертификатом работает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:09 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
РостигайArm79, Извиняюсь. Ваш вопрос поставил меня в тупик. Что означает "вы уверены, что сертификат, который у вас в системе, точно подходит для проверки подписи" ? Разве операция проверки подписи по сертификату не с каждым сертификатом работает ? Разумеется, не с каждым. Всегда есть пара ключ/сертификат (грубо). И сертификат от чужого ключа никак не подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:12 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Но ведь я же использую сертификат, которым подписывали. Подписывание производилось на моей машине сторонней утилитиной, сертификатом, который я тоже использую. Код: c# 1.
Я просто под отладчиком в списке его нашел по имени. Над юзабельностью буду думать потом, сейчас нужно чтобы хотя бы основа заработала. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:16 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Хорошо, понятно, сертификат тот же. Теперь какой точно алгоритм ЭЦП - SHA? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:19 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Я тут написал код уже, по приведенной Вами ссылке (спасибо). Столкнулся с проблемой. Подписал хэш и сохранил полученные байты в файл. Выяснилась проблема - файл с подписью, который выдала сторонняя утилита - он размером 1,7 Кб. А моя полученная подпись лишь 20 байт. Сейчас проверю метод, проверяющий подпись по приведенной Вами ссылке. Отвечая на последний вопрос - ну да, SHA, код 322772. Я находил ссылку с кодами шифров, код 322772 - соотвестветствует SHA_1 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:25 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Т.е. очевидно, что утилита записывает в файл ЭЦП и зашифрованные данные сразу. Поэтому просто похоже проблематично сравнить, что C# код выдал ту же ЭЦП, что и та утилита... Сейчас Протестирую проверку ЭЦП. Может подтвердит - и то хорошо бы было. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:27 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
РостигайА моя полученная подпись лишь 20 байт 20 нереально. у sha-1 длина подписи 160 байт. а 1,7 кб, ну не знаю. Если исходный файл = длина подписанного - (160-260) байт, значит добавлена только подпись. Если размер отличается больше, вероятно, в подпись добавлен еще и проверочный сертификат ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:29 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Не вышло. Проверка подписи не прошла: valid = csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), signature); Очевидно, потому, что я передаю туда: var signature = File.ReadAllBytes("Test.ecp"); А файл Test.ecp размером 1,7 Кб. Метод VerifyHash скорее всего ожидает только подпись. Как бы отделить подпись от зашифрованного текста из файла ? Либо - какими методами нужно мне пользоваться, чтобы тоже получить склеееный текст с подписью ? Сори, нет знаний по этой теме - а запутатся очень легко в куче разных классов и их методах. Может RSAPKCS1SignatureFormatter как-то поможет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:34 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
РостигайVerifyHashVerifyData ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:34 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm7920 нереально. у sha-1 длина подписи 160 байт. Код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
signedHash - размер массива (и файла на диске, после сохранения) - 128 байт.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:37 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
РостигайArm7920 нереально. у sha-1 длина подписи 160 байт. Код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
signedHash - размер массива (и файла на диске, после сохранения) - 128 байт.... Сорри, это я ошибся. Не 160 байт, а 160 бит, то есть 20 байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:38 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79РостигайVerifyHashVerifyData Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вот жеж блин :( PS !!! Есть сомнения в сторонней утилите !! Подскажите - есть ли сторонняя известная программа, которая подписывает цифровой подписью ? Я бы ее лучше скачал и ей бы рассчитал подпись... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:41 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Моя задача написать библиотечку, которая будет подписывать файлы (ну и проверять подпись). Выдали какую-то левую прогу (тоже самописную !), объявив ее эталоном.... Возможно я зря сверяюсь с ней ! Есть ли публичная программа, с которой можно сверится ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:44 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Есть возможность выложить сюда сертификат и подписанный файл? Тестовый какой-нибудь? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:45 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Спасибо большое ! Я отправил на почту, указанную в Вашем профиле. Просто файл с рабочими данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 16:59 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Дошло ли письмо ? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 17:45 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Да, дошло. Что-то вы ересь какую то гоните, простите уж. Ваш 3.ecp отнюдь не содержит подпись. Там какая то корявая base64 строка, которую стандартный convert.frombase64string не опознал, но онлайн декодер выдал маловразумительное. но в этом маловразумительном были куски текста типа: Created by http://www.fiddler2.com1, mail.google.com, и так далее. Это 100% не подпись. вот код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 17:51 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Я в шоке вообще :) Прога получается вообще не работает. Не понятно, что она вообще вычисляет. Огромное спасибо за код ! Огромное :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:02 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Тот файл, что я таки выслал - подписан ВЕРНО ! Сам удивлен. Проверил в бесплатной программе "КриптоАРМ" (поставил в триальном варианте полнофункционал). Прога сообщила, что "Подписи математически корректны, но нет полного доверия к одному или нескольким сертификатам подписи" Ну да. Сертификат конечно левый. Но вот подписалось все ок :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 19:09 |
|
Цифровая подпись. Хнык хнык :(
|
|||
---|---|---|---|
#18+
Arm79, Блин... КриптоАРМ выругался, что подпись, полученная по Вашему коду: Код: c# 1. 2. 3. 4. 5. 6. 7.
не является подписью.... Сами можете проверить... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 19:21 |
|
|
start [/forum/topic.php?fid=20&msg=38773622&tid=1402348]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 482ms |
0 / 0 |