Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline U3962  
#1 Оставлено : 7 марта 2017 г. 12:48:53(UTC)
U3962

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.12.2016(UTC)
Сообщений: 46
Российская Федерация
Откуда: Сургут

Сказал(а) «Спасибо»: 10 раз
Поблагодарили: 3 раз в 2 постах
Добрый день.
В СМЭВ 3 клиенте есть функция, которая считает хэш для файла.
Выглядит так:
Код:
 
public DigestInputStream getDigestInputStream(InputStream inputStream) throws SMEVSignatureException {
        try {
            return new DigestInputStream(inputStream, DigitalSignatureFactory.getDigitalSignatureProcessor().getDigest());
        } catch (SignatureProcessingException e) {
            throw new SMEVSignatureException(e.getMessage(), e);
        }
}


При использовании crypto-1.1 эта процедура работает, а при использовании crypto-2.0 возвращает ошибку:
Код:
Exception in thread "main" java.lang.NoSuchMethodError: ru.voskhod.crypto.DigitalSignatureProcessor.getDigest()Ljava/security/MessageDigest;
        at ru.voskhod.smev.client.api.signature.impl.SignerImpl.getDigestInputStream(SignerImpl.java:221)
        at ru.voskhod.smev.client.api.signature.impl.SignerImpl.getDigestInputStream(SignerImpl.java:212)
        at ru.voskhod.smev.client.api.signature.impl.SignerImpl.getDigest(SignerImpl.java:188)
        at ru.voskhod.smev.client.toolset.signer.Main.execute(Main.java:97)
        at ru.voskhod.smev.client.toolset.signer.Main.main(Main.java:66)

Подскажите, как адаптировать процедуру под crypto-2.0 ?


Отвечу сам, может кому-то пригодится:
Код:

package digest;
import ru.CryptoPro.JCP.JCP;
import java.io.*;
import java.security.*;
import java.security.cert.CertificateException;
import ru.CryptoPro.CAdES.exception.*;
import java.nio.file.Files;
import java.nio.file.Paths;

public class run {
	
	 
	public static String toHexString(byte[] array) {
	    final char[] hex = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
	            'B', 'C', 'D', 'E', 'F'};
	    StringBuffer ss = new StringBuffer(array.length * 3);
	    for (int i = 0; i < array.length; i++) {
	        ss.append(' ');
	        ss.append(hex[(array[i] >>> 4) & 0xf]);
	        ss.append(hex[array[i] & 0xf]);
	    }
	    return ss.toString();
	}
	
	public static void main(String[] args) throws NoSuchAlgorithmException, IOException, KeyStoreException, CertificateException, UnrecoverableKeyException, CAdESException {
		 // создание объекта хеширования данных
		 byte[] data = Files.readAllBytes(Paths.get("C:\\_localsoft\\FSSP_FILES\\answers\\res_13532125435.xml"));
	     MessageDigest digest = MessageDigest.getInstance(JCP.GOST_DIGEST_OID);
	     digest.update(data);
	     // вычисление значения хеша
	     System.out.println(toHexString(digest.digest()));
	     FileOutputStream out = new FileOutputStream("digest.txt");
		 out.write(digest.digest());
		 out.close();
 
	}
}


Отредактировано пользователем 31 марта 2017 г. 10:41:22(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил U3962 за этот пост.
chebevara оставлено 20.01.2018(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.