| 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
 Сообщений: 11
 
 Сказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Добрый день,  есть код на JS, как сделать тоже самое на Net ? или через командную строку csptest Цитата:        var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
 yield oHashedData.propset_Algorithm(101); //CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
 yield oHashedData.SetHashValue("E0438626A6EBA03330B01A85571CA69E3B019A4E801374D6B04089C2A105DB2F");
 var oRawSignature = yield cadesplugin.CreateObjectAsync("CAdESCOM.RawSignature");
 var sSignedMessage = yield oRawSignature.SignHash(oHashedData, oCertificate);
 
 на выходе строка 128 символов Отредактировано пользователем 2 июня 2021 г. 12:37:14(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234 Сказал(а) «Спасибо»: 105 разПоблагодарили: 296 раз в 276 постах
 
 | 
            
		      
                Добрый день! .Net: Код:            byte[] data = File.ReadAllBytes(fileName);
            
            // Создаем объект для хэширования.
            Gost3411_2012_256CryptoServiceProvider gost3411 = new Gost3411_2012_256CryptoServiceProvider();
            // Вычисляем хэш от всех прочитанных данных.
            byte[] hashValue = gost3411.ComputeHash(data);
            gost3411.Clear();
            X509Certificate2 signerCert = GetSignerCert("test2012");
            Console.WriteLine("Сертификат: {0}",signerCert.Subject);
            // первый способ
            Gost2012_256SignatureFormatter gost = new Gost2012_256SignatureFormatter();
            gost.SetKey(signerCert.PrivateKey);
            byte[] sign = gost.CreateSignature(hashValue);
            File.WriteAllBytes(sigFileName1,sign.Reverse().ToArray());
            // второй способ
            Gost3410_2012_256CryptoServiceProvider cert_key = signerCert.PrivateKey as Gost3410_2012_256CryptoServiceProvider;
            sign = cert_key.CreateSignature(hashValue);
            File.WriteAllBytes(sigFileName2, sign);
 пойбайтово надо переворачивать (.Reverse().ToArray()) для совместимости с CSP. Отредактировано пользователем 2 июня 2021 г. 18:28:51(UTC)
 | Причина: Не указана | 
|  | 
    | 
              1 пользователь поблагодарил Санчир Момолдаев за этот пост. |  | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
 Сообщений: 11
 
 Сказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: Санчир Момолдаев  Добрый день!.Net:
 пойбайтово надо переворачивать (.Reverse().ToArray()) для совместимости с CSP.
 Спасибо! Получилось только hash читал по другому  Код:
          byte[] hashValue = Enumerable.Range(0, hash.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hash.Substring(x, 2), 16))
                             .ToArray();
 А можете ещё сориентировать, как добавить атрибут к подписи? Код на JS  Код:        var oHashedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');
        yield oHashedData.propset_DataEncoding(1); //CADESCOM_CONTENT_ENCODING_TYPE.BASE64_TO_BINARY
        yield oHashedData.propset_Algorithm(101); //CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
        yield oHashedData.SetHashValue(sHashValue);
        var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
        yield oSigningTimeAttr.propset_Name(0);
        yield oSigningTimeAttr.propset_Value(ConvertDate(new Date()));
        var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
        yield oSigner.propset_Certificate(oCertificate);
        yield oSigner.propset_CheckCertificate(true);
        yield oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN 
        var oAuthAttrs = yield oSigner.AuthenticatedAttributes2;
        yield oAuthAttrs.Add(oSigningTimeAttr);
        var oSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData');
        var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, 1);
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234 Сказал(а) «Спасибо»: 105 разПоблагодарили: 296 раз в 276 постах
 
 | 
            
		      
                вы какую подпись хотите получить?в raw подписи нет аттрибутов.
 и какой аттрибут хотите добавить.
 
 зачем такая операция с hashValue? какая длина получилась?
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
 Сообщений: 11
 
 Сказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: Санчир Момолдаев  вы какую подпись хотите получить?в raw подписи нет аттрибутов.
 Обычную открепленную подпись Автор: Санчир Момолдаев  и какой аттрибут хотите добавить. CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0 Код:
        public static string SignData(string hash, string inn)
        {
            byte[] hashValue = Enumerable.Range(0, hash.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hash.Substring(x, 2), 16))
                             .ToArray();
            X509Certificate2 signerCert = GetSignerCert(inn);
            Gost3410_2012_256 privateKey = signerCert.PrivateKey as Gost3410_2012_256;
            ContentInfo contentInfo = new ContentInfo(hashValue);
            SignedCms signedCms = new SignedCms(contentInfo, true);
            CmsSigner cmsSigner = new CmsSigner(SubjectIdentifierType.Unknown, signerCert);
            cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
            cmsSigner.IncludeOption = X509IncludeOption.WholeChain;
            signedCms.ComputeSignature(cmsSigner);
            byte[] sign = signedCms.Encode();
            string hex = BitConverter.ToString(sign).Replace("-", string.Empty);
            return hex;
        }
 Правильно я нагуглил? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234 Сказал(а) «Спасибо»: 105 разПоблагодарили: 296 раз в 276 постах
 
 | 
            
		      
                на windows данный аттрибут добавляется автоматически начиная с csp4.0 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
 Сообщений: 11
 
 Сказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: Санчир Момолдаев  на windows данный аттрибут добавляется автоматически начиная с csp4.0 вы можете мне весь код перевести на Net ? Код:        
        var oHashedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');
        yield oHashedData.propset_DataEncoding(1); //CADESCOM_CONTENT_ENCODING_TYPE.BASE64_TO_BINARY
        yield oHashedData.propset_Algorithm(101); //CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
        yield oHashedData.SetHashValue(sHashValue);
        var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
        yield oSigningTimeAttr.propset_Name(0);//CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME 
        yield oSigningTimeAttr.propset_Value(ConvertDate(new Date()));
        var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
        yield oSigner.propset_Certificate(oCertificate);
        yield oSigner.propset_CheckCertificate(true);
        yield oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN 
        var oAuthAttrs = yield oSigner.AuthenticatedAttributes2;
        yield oAuthAttrs.Add(oSigningTimeAttr);
        var oSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData');
        var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, 1);
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234 Сказал(а) «Спасибо»: 105 разПоблагодарили: 296 раз в 276 постах
 
 | 
            
		      
                какая конечная цель?подпись по хэшу нет в SignedCMS
 С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
 Сообщений: 11
 
 Сказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: Санчир Момолдаев  какая конечная цель?подпись по хэшу нет в SignedCMS
 С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен
 мне нужно подписать строку | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234 Сказал(а) «Спасибо»: 105 разПоблагодарили: 296 раз в 276 постах
 
 | 
            
		      
                тогда думаю подойдет обычная подпись через SignedCms Код:ContentInfo contentInfo = new ContentInfo(dataToSign);
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(certificate);
signedCms.ComputeSignature(cmsSigner);
Byte[] signatureResult = signedCms.Encode();
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close