2016-09-30 7 views
1

通常のテキストを含むファイルに署名するにはどうすればよいですか?テキストファイルに署名する方法、または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でそれを見つけることを試みたが、私はそれを検索するために間違った言葉を使用していると思う。だから、どんな助けもありがたい

+0

これが役立つかどうかを確認してください。https://blogs.msdn.microsoft.com/alejacma/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-証明書-c/ – neo

答えて

-4

MSワード内から.txtに署名し、Officeを開くことができます。正確な方法は、使用するバージョンによって異なります。

+0

申し訳ありませんが、MSの言葉やOpen OfficeはC#アプリケーションと何が関係していますか?もし私が一度だけそれをやりたければ、私はUSBトークン/証明書を備えたソフトウェアを使うことができました。しかし、私はそれを何度もやり直すためのアプリケーションを作成しようとしています。 – Kedor

0

デジタル署名でファイルに署名するには、ファイルデータと署名ブロックを区別するために使用できるスキーマが必要です。たとえば、スクリプトテキストファイル(たとえば、.ps1、.vbs、.jsなど)は、ファイルの最後にコメントブロック内に署名が置かれるようなスキーマを持ちます。

テキストファイルにこのようなスキーマがないため、新しいファイルタイプを導入し、ファイルの内容と署名を定義するルールを定義する必要があります構造。

テキストファイルにルールを適用できない場合は、カタログ署名を使用できます。この場合、テキストファイルのハッシュをカタログファイル(.cat)に入れ、デジタル署名します。

関連する問題