CipherReference クラス
アセンブリ: System.Security (system.security.dll 内)
構文
このクラスは、XML 暗号化の <CipherReference> 要素を表します。このクラスは、暗号化されたデータの生成元のソースを識別します。
<CipherReference> によって参照される実際の暗号化されたデータは、次のプロセスによって取得されます。<CipherReference> URI プロパティは、逆参照される URI (Uniform Resource Identifier) を格納します。<CipherReference> 要素に変換チェーンも格納される場合、URI を逆参照した結果のデータが指定に従って変換されて、暗号化されたデータが生成されます。たとえば、暗号化されたデータが XML ドキュメント内で base64 でエンコードされている場合、変換では、暗号化されたデータを抽出するために、XPath 式に続けて base64 でのデコードを指定します。
URI および変換の構文は、XML デジタル署名の構文に似ています。ただし、XML デジタル署名では、生成プロセスと検証プロセスはどちらも同じソース データで開始され、同じ順序で変換を実行します。XML 暗号化では、復号化アプリケーションは、暗号化されたデータと指定された変換を持つだけです。これらの変換は、暗号化されたデータを取得するために必要な順序で列挙されます。
メモ 既定では、Web サイトからのファイルなどの、ソースが不明なドキュメントから暗号参照を逆参照することはできません。これは、DocumentEvidence プロパティが null だからです。たとえば、Web 上のファイルを参照する <CipherReference> 要素を含んでいるファイルを復号化しようとすると、完全に信頼されたアセンブリからその要求を出した場合であっても SecurityException がスローされます。
復号化しようとしているドキュメントを信頼できることが確実にわかっている場合は、次のコードを使用して、完全に信頼されたアプリケーションの動作を変更できます。
CipherReference の新しいインスタンスを作成するコード例を次に示します。
Imports System Imports System.Security.Cryptography.Xml Imports System.Xml Imports System.IO '/ This sample used the EncryptedData class to create a EncryptedData element '/ and write it to an XML file. It demonstrates the use of CipherReference. Module Module1 Sub Main() ' Create a URI string. Dim uri As String = "http://www.woodgrovebank.com/document.xml" ' Create a Base64 transform. The input content retrieved from the ' URI should be Base64-decoded before other processing. Dim base64 As Transform = New XmlDsigBase64Transform Dim tc As New TransformChain tc.Add(base64) ' Create <CipherReference> information. Dim reference As CipherReference = New CipherReference(uri, tc) ' Create a new CipherData object. ' Note that you cannot assign both a CipherReference and a CipherValue ' to a CipherData object. Dim cd As CipherData = New CipherData(Reference) ' Create a new EncryptedData object. Dim ed As New EncryptedData 'Add an encryption method to the object. ed.Id = "ED" ed.EncryptionMethod = New EncryptionMethod("http://www.w3.org/2001/04/xmlenc#aes128-cbc") ed.CipherData = cd 'Add key information to the object. Dim ki As New KeyInfo ki.AddClause(New KeyInfoRetrievalMethod("#EK", "http://www.w3.org/2001/04/xmlenc#EncryptedKey")) ed.KeyInfo = ki ' Create new XML document and put encrypted data into it. Dim doc As New XmlDocument Dim encryptionPropertyElement As XmlElement = CType(doc.CreateElement("EncryptionProperty", EncryptedXml.XmlEncNamespaceUrl), XmlElement) Dim ep As New EncryptionProperty(encryptionPropertyElement) ed.AddProperty(ep) ' Output the resulting XML information into a file. Dim path As String = "c:\test\MyTest.xml" File.WriteAllText(path, ed.GetXml().OuterXml) End Sub End Module
using System; using System.Security.Cryptography.Xml; using System.Xml; using System.IO; /// This sample used the EncryptedData class to create an encrypted data element /// and write it to an XML file. It demonstrates the use of CipherReference. namespace EncryptedDataSample { class Sample1 { [STAThread] static void Main(string[] args) { //Create a URI string. String uri = "http://www.woodgrovebank.com/document.xml"; // Create a Base64 transform. The input content retrieved from the // URI should be Base64-decoded before other processing. Transform base64 = new XmlDsigBase64Transform(); //Create a transform chain and add the transform to it. TransformChain tc = new TransformChain(); tc.Add(base64); //Create <CipherReference> information. CipherReference reference = new CipherReference(uri, tc); // Create a new CipherData object using the CipherReference information. // Note that you cannot assign both a CipherReference and a CipherValue // to a CipherData object. CipherData cd = new CipherData(reference); // Create a new EncryptedData object. EncryptedData ed = new EncryptedData(); //Add an encryption method to the object. ed.Id = "ED"; ed.EncryptionMethod = new EncryptionMethod("http://www.w3.org/2001/04/xmlenc#aes128-cbc"); ed.CipherData = cd; //Add key information to the object. KeyInfo ki = new KeyInfo(); ki.AddClause(new KeyInfoRetrievalMethod("#EK", "http://www.w3.org/2001/04/xmlenc#EncryptedKey")); ed.KeyInfo = ki; // Create new XML document and put encrypted data into it. XmlDocument doc = new XmlDocument(); XmlElement encryptionPropertyElement = (XmlElement)doc.CreateElement("EncryptionProperty", EncryptedXml.XmlEncNamespaceUrl); EncryptionProperty ep = new EncryptionProperty(encryptionPropertyElement); ed.AddProperty(ep); // Output the resulting XML information into a file. try { string path = @"c:\test\MyTest.xml"; File.WriteAllText(path, ed.GetXml().OuterXml); } catch (IOException e) { Console.WriteLine("File IO error. {0}", e); } } } }
#using <System.Xml.dll> #using <System.Security.dll> #using <System.dll> using namespace System; using namespace System::Security::Cryptography::Xml; using namespace System::Xml; using namespace System::IO; /// This sample used the EncryptedData class to create an encrypted data element /// and write it to an XML file. It demonstrates the use of CipherReference. [STAThread] int main() { //Create a URI string. String^ uri = "http://www.woodgrovebank.com/document.xml"; // Create a Base64 transform. The input content retrieved from the // URI should be Base64-decoded before other processing. Transform^ base64 = gcnew XmlDsigBase64Transform; //Create a transform chain and add the transform to it. TransformChain^ tc = gcnew TransformChain; tc->Add( base64 ); //Create <CipherReference> information. CipherReference ^ reference = gcnew CipherReference( uri,tc ); // Create a new CipherData object using the CipherReference information. // Note that you cannot assign both a CipherReference and a CipherValue // to a CipherData object. CipherData ^ cd = gcnew CipherData( reference ); // Create a new EncryptedData object. EncryptedData^ ed = gcnew EncryptedData; //Add an encryption method to the object. ed->Id = "ED"; ed->EncryptionMethod = gcnew EncryptionMethod( "http://www.w3.org/2001/04/xmlenc#aes128-cbc" ); ed->CipherData = cd; //Add key information to the object. KeyInfo^ ki = gcnew KeyInfo; ki->AddClause( gcnew KeyInfoRetrievalMethod( "#EK","http://www.w3.org/2001/04/xmlenc#EncryptedKey" ) ); ed->KeyInfo = ki; // Create new XML document and put encrypted data into it. XmlDocument^ doc = gcnew XmlDocument; XmlElement^ encryptionPropertyElement = dynamic_cast<XmlElement^>(doc->CreateElement( "EncryptionProperty", EncryptedXml::XmlEncNamespaceUrl )); EncryptionProperty ^ ep = gcnew EncryptionProperty( encryptionPropertyElement ); ed->AddProperty( ep ); // Output the resulting XML information into a file. try { String^ path = "c:\\test\\MyTest.xml"; File::WriteAllText( path, ed->GetXml()->OuterXml ); } catch ( IOException^ e ) { Console::WriteLine( "File IO error. {0}", e ); } }
package EncryptedDataSample; import System.*; import System.Security.Cryptography.Xml.*; import System.Xml.*; import System.IO.*; /// This sample used the EncryptedData class to create an encrypted data element /// and write it to an XML file. It demonstrates the use of CipherReference. class Sample1 { /** @attribute STAThread() */ public static void main(String[] args) { //Create a URI string. String uri = "http://www.woodgrovebank.com/document.xml"; // Create a Base64 transform. The input content retrieved from the // URI should be Base64-decoded before other processing. Transform base64 = new XmlDsigBase64Transform(); //Create a transform chain and add the transform to it. TransformChain tc = new TransformChain(); tc.Add(base64); //Create <CipherReference> information. CipherReference reference = new CipherReference(uri, tc); // Create a new CipherData object using the CipherReference information. // Note that you cannot assign both a CipherReference and a CipherValue // to a CipherData object. CipherData cd = new CipherData(reference); // Create a new EncryptedData object. EncryptedData ed = new EncryptedData(); //Add an encryption method to the object. ed.set_Id("ED"); ed.set_EncryptionMethod(new EncryptionMethod( "http://www.w3.org/2001/04/xmlenc#aes128-cbc")); ed.set_CipherData(cd); //Add key information to the object. KeyInfo ki = new KeyInfo(); ki.AddClause(new KeyInfoRetrievalMethod("#EK", "http://www.w3.org/2001/04/xmlenc#EncryptedKey")); ed.set_KeyInfo(ki); // Create new XML document and put encrypted data into it. XmlDocument doc = new XmlDocument(); XmlElement encryptionPropertyElement = (XmlElement)doc.CreateElement( "EncryptionProperty", EncryptedXml.XmlEncNamespaceUrl); EncryptionProperty ep = new EncryptionProperty(encryptionPropertyElement); ed.AddProperty(ep); // Output the resulting XML information into a file. try { String path = "c:\\test\\MyTest.xml"; File.WriteAllText(path, ed.GetXml().get_OuterXml()); } catch (IOException e) { Console.WriteLine("File IO error. {0}", e); } } //main } //Sample1
System.Security.Cryptography.Xml.EncryptedReference
System.Security.Cryptography.Xml.CipherReference
プラットフォーム
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- CipherReference クラスのページへのリンク