Статус: Участник
Группы: Участники
Зарегистрирован: 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,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
Добрый день! .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,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
вы какую подпись хотите получить? в 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,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
на 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,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
какая конечная цель? подпись по хэшу нет в SignedCMS С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.02.2021(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 1 раз
|
Автор: Санчир Момолдаев какая конечная цель? подпись по хэшу нет в SignedCMS С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен мне нужно подписать строку
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
тогда думаю подойдет обычная подпись через 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