На множестве фрумов задают вопросы "Да кто такой этот ваш КриптоПро?". На данный момент существуе множество сервисов (в основном государственных), которые требуют подписание отправляемых данных по УКЭП. А как это сделать то?
Вот вам пример на VBS подписания произвольной строки открепленной цифровой подписью:
'-------------------- Получаем объекты -------------------------
On Error Resume Next
Set objCadeCom = CreateObject("CAdESCOM.CPSigner")
Set objCadeComStore = CreateObject("CAdESCOM.Store")
Set objSigningTimeAttr = CreateObject("CAdESCOM.CPAttribute")
Set objSignedData = CreateObject("CAdESCOM.CadesSignedData")
Set objSvrHTTPS = CreateObject("WinHttp.WinHttpRequest.5.1")
Set WshShell = CreateObject("WScript.Shell" )
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ExpCrt = Nothing ' Тут магия. Если написать так, то вы увидете диалог опреционной системы для выбора сертификата
public LogFilePath
Path = WshShell.CurrentDirectory
LogFilePath = Path&"\auth_log.log" ' Имя файла лога
If objFSO.FileExists(LogFilePath) = 0 Then 'Содаем файл лога, если его нет.
set objTSlog = objFSO.CreateTextFile(LogFilePath)
objTSlog.Close
End If
objCadeComStore.Open 2,"My",0
Set Certs=objCadeComStore.Certificates
If Err.Number <> 0 Then ' Запись сообщения об ошибке в лог
Log (Err.Description)
End If
objCadeCom.Certificate = ExpCrt
objSigningTimeAttr.Name=0
objSigningTimeAttr.Value=Now
objCadeCom.AuthenticatedAttributes2.Add(objSigningTimeAttr)
TextForSign = "Работа с УКЭП это не просто"
objSignedData.ContentEncoding = 0 'Тут 1 - если ваше сообщение закодировано в Base64 и 0 если нет.
objSignedData.Content = TextForSign
sSignedMessage = objSignedData.SignCades(objCadeCom, 1,False, 0)
sSignedMessage = Replace(sSignedMessage,Chr(13),"")
sSignedMessage = Replace(sSignedMessage,Chr(10),"")
Log sSignedMessage 'Запись подписанной строки в лог
objSignedData = Unassgned
objCadeCom = Unassgned
objCadeComStore = Unassgned
objSigningTimeAttr = Unassgned
If Err.Number <> 0 Then ' Запись сообщения об ошибке в лог
Log (Err.Description)
End If
wscript.quit
'---------------------------------------------------------------------
Function Log (strLog)' Запись лога
Set objTSlog = objFSO.OpenTextFile(LogFilePath, 8)
objTSlog.Writeline Now & " " & strLog
objTSlog.Close
End Function
Ничего сложного. Только вот примеров подобной операции я нигде не нашел.
Подобным образом можно подписывать так же и файлы.
Новые комментарии