Предыстория:
- По мотивам http://forum.infostart.ru/forum86/topic136695/
- Я забанен до некоторого момента на форуме, ответить в комментах не могу. Решено сделать публикацию.
- Изначально использовалась библиотека botan ( http://botan.randombit.net/ ) , но не смог скомпилировать ее под Windows без использования c++ redistributable (есть подозрение , что это и невозможно на текущий момент, но я совсем с плюсами на Вы) , а это дополнительная зависимость, которой не хотелось иметь (имея c++ redistributable , естественно все получилось и есть версия компоненты с Botan, но выкладывать ее не буду)
- Поэтому решил использовать библиотеку Crypto++ ( http://www.cryptopp.com/ ) , которая распространяется под лицензией Boost Software License https://ru.wikipedia.org/wiki/Boost_Software_License
- Библиотека с Crypto++ сделана вместе со статьей за один присест ))) , поэтому есть вероятность появления неожиданностей и рекомендую все таки сразу не использовать в продакшн коде, а проверить ее. (к сожалению серьезных тестов я не делал, ограничившись проверкой пары хэшей с сайта freeformatter.com/hmac-generator.html и сравнением с результатами кода в питоне)
- Методы
СлучайноеЧисло(МинимальноеЗначение,Максимальное значение) - Возвращает случайное число заданного диапазона
RandomNumber
ХешированиеДанныхКодом (НаименованиеАлгоритма, Сообщение, Ключ)
DataHashingMAC
Возвращает результат(ДвоичныеДанные) хеширования HMAC алгоритма заданного первым аргументом .
Например:
НаименованиеАлгоритма = "HMAC(SHA-1)";
Сообщение = "Тестовая строка";
Ключ = "Тестовый ключ857";
ДвоичныеДанные = ОбъектВК.ХешированиеДанныхКодом (НаименованиеАлгоритма, Сообщение, Ключ);
ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary");
Данные = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ДвоичныеДанные);
Сообщить(Данные.ЛексическоеЗначение);
Будет сообщение - 00634d9276c7e8fa3b8e4d3015a22f4a8438b
ХешированиеДанных (НаименованиеАлгоритма, Сообщение)
DataHashing
Возвращает результат(ДвоичныеДанные) хеширования алгоритма заданного первым аргументом .
В принципе особого смысла метод не имеет для алгоритмов, которые уже есть возможность использовать в программе . SHA-1 , например или MD5. С другой стороны в Crypto++ реализовано гораздо больше алгоритмов . Например : Whirlpool
PS. Замечание: при вызове метода с неизвестными именами алгоритмов или неправильными именами , программа будет завершаться с ошибкой. Это будет исправлено на выдачу исключения.