📄 signcrypt.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 + -