Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2017(UTC) Сообщений: 2
|
Как нормализховать XML для СМЭВ, не подписывая её?
XmlDocument doc = new XmlDocument(); doc.Load(new XmlTextReader(flnm_in.Text)); SignedXml signedXml = new SignedXml(doc); XmlDsigSmevTransform smev = new XmlDsigSmevTransform(); Reference reference = new Reference(); reference.Uri = ""; reference.AddTransform(smev); signedXml.AddReference(reference); XmlWriterSettings settings = new XmlWriterSettings(); settings.Async = false; XmlWriter wrt = XmlWriter.Create(flnm_out.Text); signedXml.GetXml().WriteContentTo(wrt);
На последней строке ошибка: Требуется метод подписи.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
|
Автор: Ak05 Как нормализховать XML для СМЭВ, не подписывая её? Если имеется ввиду С14, то примерно так: Код:
public static void c14transform(XmlElement elem, Boolean sgn)
{
if (!g.useC14) return;
XmlDocument xdoc = new XmlDocument();
xdoc.PreserveWhitespace = false;
xdoc.LoadXml(elem.OuterXml);
System.Security.Cryptography.Xml.XmlDsigExcC14NTransform xmlTransform =
new System.Security.Cryptography.Xml.XmlDsigExcC14NTransform(false);
xmlTransform.LoadInput((object)xdoc);
xdoc.Load((MemoryStream)xmlTransform.GetOutput());
XmlNode parent = elem.ParentNode;
parent.RemoveChild((XmlNode)elem);
//if (parent.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
if (parent.FirstChild is XmlDeclaration)
{
parent.InnerXml = xdoc.DocumentElement.OuterXml;
}
else
{
parent.InnerXml = xdoc.DocumentElement.OuterXml + parent.InnerXml;
}
if (sgn)
{
byte[] hData = ((MemoryStream)xmlTransform.GetOutput()).ToArray();
//string tre = Encoding.GetEncoding(1251).GetString(hData);
//tre = tre.Replace("<ds:SignedInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">", "");
//tre = tre.Replace("</ds:SignedInfo>", "");
//hData = Encoding.GetEncoding(1251).GetBytes(tre);
HashAlgorithm myhash = HashAlgorithm.Create("GOST3411");
// 'лзЁб<п_┐ е_и
byte[] hValue = myhash.ComputeHash(hData);
CspParameters cspprm = new CspParameters(75);
CspKeyContainerInfo kinfo = ((ICspAsymmetricAlgorithm)g.CertSOAP.PrivateKey).CspKeyContainerInfo;
cspprm.KeyContainerName = kinfo.KeyContainerName;
Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider(cspprm);
byte[] sHash = Gost.SignHash(hValue);
string sgnb64 = Convert.ToBase64String(sHash);
bool b = Gost.VerifyHash(hValue, sHash);
//XmlNamespaceManager nsmgr = new XmlNamespaceManager(parent.NameTable);
//nsmgr.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");
foreach (XmlNode xnode in parent.ChildNodes)
{
if (xnode.Name == "ds:SignatureValue")
{
xnode.InnerText = sgnb64;
break;
}
g.WriteLog(xnode.Name);
}
//XmlNode xnode = parent.SelectSingleNode("ds:SignatureValue", nsmgr);
//parent.SelectSingleNode("ds:SignatureValue",nsmgr).InnerText = sgnb64;
}
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close