通常のテキストを含むファイルに署名するにはどうすればよいですか?テキストファイルに署名する方法、またはxml以外に署名する方法
私はすぐに説明しています。
USBトークンで証明書を使用してXML文書に署名できるC#でアプリを作成しました。
私の質問は、どのように行うためにされて
public static string SignXmlWithCertificate(XmlDocument Document, X509Certificate2 cert)
{
SignedXml signedXml = new SignedXml(Document);
// pure black magic
signedXml.SigningKey = cert.PrivateKey;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
// Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env =
new XmlDsigEnvelopedSignatureTransform(true);
reference.AddTransform(env);
//canonicalize
XmlDsigC14NTransform c14t = new XmlDsigC14NTransform();
reference.AddTransform(c14t);
KeyInfo keyInfo = new KeyInfo();
KeyInfoX509Data keyInfoData = new KeyInfoX509Data(cert);
KeyInfoName kin = new KeyInfoName();
kin.Value = "Public key of certificate";
RSACryptoServiceProvider rsaprovider = (RSACryptoServiceProvider)cert.PublicKey.Key;
RSAKeyValue rkv = new RSAKeyValue(rsaprovider);
keyInfo.AddClause(kin);
keyInfo.AddClause(rkv);
keyInfo.AddClause(keyInfoData);
signedXml.KeyInfo = keyInfo;
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
// Compute the signature.
signedXml.ComputeSignature();
// Get the XML representation of the signature and save
// it to an XmlElement object.
XmlElement xmlDigitalSignature = signedXml.GetXml();
Document.DocumentElement.AppendChild(
Document.ImportNode(xmlDigitalSignature, true));
return Document.OuterXml;
}
実際の質問:私はコレクションから証明書を選択:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
X509Certificate2 myCert = null;
X509Store st = new X509Store();
st.Open(OpenFlags.ReadOnly);
X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Choose certificate:", "", X509SelectionFlag.SingleSelection);
をそして私は私がこれまでに得たすべてのものを使用して、このXML文書に署名しますこれは普通のテキストファイルだけです。私は署名ソフトウェアを使うと、XMLとは違ってテキストがbase64でエンコードされていることを除いて、ほとんど同じファイルを見ることができます。
通常のファイルに署名するためにC#でどのようなメソッドを使用しますか? XmlDocument
にロードすることはできません。なぜなら、それはXMLではないからです。
あなたはとにかく尋ねるつもりなので、はい。私はGoogleでそれを見つけることを試みたが、私はそれを検索するために間違った言葉を使用していると思う。だから、どんな助けもありがたい
これが役立つかどうかを確認してください。https://blogs.msdn.microsoft.com/alejacma/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-証明書-c/ – neo