⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signcrypt.cs

📁 本人目前在做一个关于“数字签名”的项目
💻 CS
字号:
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using CAPICOM;
using System.IO;
using System.Xml;
using System.Text;

public class SignCrypt
{

	private const string FILE_NAME="myfile.txt";

	[STAThread]
	public static void Main(string[] args)
	{
		

		string c, s;
		c = "";
		
		//打开文件并显示其内容 
		string sFileName= "testfile.txt";

		StreamWriter sw;

		if( File.Exists( FILE_NAME ) ) //如果文件存在,则创建File.AppendText对象
		{
			sw=File.AppendText( FILE_NAME );
		}
		else  //如果文件不存在,则创建File.CreateText对象
		{
			sw=File.CreateText( FILE_NAME );
		}
		//			StreamReader reader = new StreamReader(sFileName);

		//		FileStream fs = File.OpenRead(Server.MapPath("test.txt"));
		StreamReader reader = new StreamReader(sFileName,UnicodeEncoding.GetEncoding("gb2312")); 

		//			StreamReader reader =  File.OpenText(@"D:\Nfha\Test\test.txt");
		try 
		{
			string str = reader.ReadToEnd();
			c = str;

		} 
		catch(IOException) 
		{ 
			//Response.Write("<script>alert('获取文件失败');history.back();</script>");
		} 
		finally 
		{ 
			if(reader!=null) 
				reader.Close(); 
		} 



		Store MyStore = new StoreClass();
		Store CerStore = new StoreClass();
		SignedData Signobj = new SignedDataClass();
		Signer Signer = new SignerClass();
		Certificate Cer = new CertificateClass();
		CAPICOM.Attribute SigningTime = new CAPICOM.AttributeClass();
		MyStore.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);

		Signer.Certificate = (Certificate) MyStore.Certificates[1];

		//Close
		Signobj.Content = c;
		SigningTime.Name = CAPICOM.CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
		SigningTime.Value = DateTime.Now;
		Signer.AuthenticatedAttributes.Add(SigningTime);
		s = Signobj.Sign(Signer, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

		sw.Write( s );
		sw.WriteLine("---------------------------------\r\n");



        CAPICOM.EnvelopedData env = new EnvelopedDataClass();
		CerStore.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "my", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);

		string envText = "";

		for (int i=1;i<=CerStore.Certificates.Count;i++)
		{
			env.Recipients.Add((Certificate)CerStore.Certificates[i]);	
		}
		env.Algorithm.Name = CAPICOM.CAPICOM_ENCRYPTION_ALGORITHM.CAPICOM_ENCRYPTION_ALGORITHM_RC4;
		env.Algorithm.KeyLength = CAPICOM.CAPICOM_ENCRYPTION_KEY_LENGTH.CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS;
		env.Content = s;
		envText = env.Encrypt(CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

		sw.Write(envText);
		sw.WriteLine("---------------------------------\r\n");
		

		env.Decrypt(envText);
		string originalText = env.Content;

		sw.Write( originalText );
		sw.WriteLine("---------------------------------\r\n");


		//call verify();

		//		Open CAPICOM_Other_STORE;
		//		SignedData.Verify s;

		try
		{
			SignedData SignObject = new SignedDataClass();
			SignObject.Content = c;

			SignObject.Verify(originalText,false,CAPICOM.CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
			Console.WriteLine("有效");
		}
		catch(System.Runtime.InteropServices.COMException)
		{
			Console.WriteLine("无效");
			
			string txt = "";
			txt = Signobj.Content;

			sw.Write( txt );
			sw.WriteLine("---------------------------------\r\n");


	//		System.Text.Encoding.ASCII.GetString(MessageText));


		}

//		for (int i=1;i<=Signobj.Signers.Count;i++)
//		{
//			Signer = (Signer) Signobj.Signers[i];
//			Cer = (Certificate) Signer.Certificate;
//		}
		
		sw.Close();

	}


/*************************************

	public void Signfile(string Inputfilename, string Outputfilename)
	{
		string c, s;
		c = "I love you!";
		Store MyStore = new StoreClass();
		SignedData Signobj = new SignedDataClass();
		Signer Signer = new SignerClass();
		CAPICOM.Attribute SigningTime = new CAPICOM.AttributeClass();
		MyStore.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);

		Signer.Certificate = (Certificate) MyStore.Certificates[1];

		//Close
		Signobj.Content = c;
		SigningTime.Name = CAPICOM.CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
		SigningTime.Value = DateTime.Now;
		Signer.AuthenticatedAttributes.Add(SigningTime);
		s = Signobj.Sign(Signer, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

	}
*******************************************************/

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -