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

📄 rsatest.cs

📁 有一个dll库
💻 CS
字号:
using System.Text.RegularExpressions;
using System.Text;
using System.IO;
using System.Net;
using System.Xml;
using System.Runtime.InteropServices;
using System;
using System.Security;
using System.Security.Cryptography;
/*
	RSA Keyinfo:
	---------------------------------------------------------------------
	可以采用java或者.net生成下面参数信息
	加密位:1024bits
	>>>PrivateKey:
	modulus:123410773237385713572440712840019405878257600213906351775134402766524785605776353635515879438375969303333340691224323217379791619946464100287854264933660919378485000299257054039555887477610831829409144592603086784397675690934246422666689022312589317493002336070775714030955737435316659994026756956753416169929
	public exponent:65537
	private exponent:102299672961750099570264341757280532275542401837445663770632643616494888426681205847125069294737520917541038900032845310395266178574112466427178094767628391398378924953787043659322148498169017989730953803803890989295625028193153480552247210183981959942844345362118479513739632952091865360095551345350474614233
	prime p:12794390226544301614076650435602993036558056678553112540698297249963365434628505393116653422818365344228379828231764392521731584684435248093787027949139091
	prime q:9645694015283940797244851561543569992525098416055322825220116046655435860727361740896753161534492415500799272063647633894112205918420307541634544631799219
	prime exponent p:1529969882744521289493243655703200580244831014386083326692594344385048063096931454992679141166478923397741927672190328275520857365639547725880173612423563
	prime exponent q:769453717928871362558494956494038236735297839680443531596667023084892788499361386413907037681040120057954721673997128797449053397950796768659923391901465
	crt coefficient:12583540851660819630796910273258143748946857763306703439274571717196507402536398234616014735603915981141807543055250658251670340810611251684169356826070785
	>>>PublicKey:
	modulus:123410773237385713572440712840019405878257600213906351775134402766524785605776353635515879438375969303333340691224323217379791619946464100287854264933660919378485000299257054039555887477610831829409144592603086784397675690934246422666689022312589317493002336070775714030955737435316659994026756956753416169929
	public exponent:65537

Writed By:midea0978
Email:midea0978@126.com
Blog:http://www.cnblogs.com/midea0978

2007.6
*/

public class RSATest
{
	[DllImport("cmipcrypt.dll")]
	public static extern String Cmip_Encrypt(String text,String exp,String module);

	[DllImport("cmipcrypt.dll")]
	public static extern String Cmip_Decrypt(String etext,String d,String module);

	[DllImport("cmipcrypt.dll")]
	public static extern String Cmip_SignData(String text,String d,String module,String alg);

	[DllImport("cmipcrypt.dll")]
	public static extern String Cmip_VerifyData(String text,String signtext,String r,String module);

	[DllImport("cmipcrypt.dll")]
	public static extern String Cmip_ComputeHash(String text,String alg);

	private String p,q,e,n,d,dp,dq,crt;
	private RSAParameters param;

	public void init(){
		p="12794390226544301614076650435602993036558056678553112540698297249963365434628505393116653422818365344228379828231764392521731584684435248093787027949139091";
		q="9645694015283940797244851561543569992525098416055322825220116046655435860727361740896753161534492415500799272063647633894112205918420307541634544631799219";
		e="65537";
		n="123410773237385713572440712840019405878257600213906351775134402766524785605776353635515879438375969303333340691224323217379791619946464100287854264933660919378485000299257054039555887477610831829409144592603086784397675690934246422666689022312589317493002336070775714030955737435316659994026756956753416169929";
		d="102299672961750099570264341757280532275542401837445663770632643616494888426681205847125069294737520917541038900032845310395266178574112466427178094767628391398378924953787043659322148498169017989730953803803890989295625028193153480552247210183981959942844345362118479513739632952091865360095551345350474614233";
		dp="1529969882744521289493243655703200580244831014386083326692594344385048063096931454992679141166478923397741927672190328275520857365639547725880173612423563";
		dq="769453717928871362558494956494038236735297839680443531596667023084892788499361386413907037681040120057954721673997128797449053397950796768659923391901465";
		crt="12583540851660819630796910273258143748946857763306703439274571717196507402536398234616014735603915981141807543055250658251670340810611251684169356826070785";

		param=new RSAParameters();
		byte[] bdata=GetBytes(e);
		param.Exponent=bdata;
		param.P=GetBytes(p);
		param.Q=GetBytes(q);
		param.Modulus=GetBytes(n);
		param.D=GetBytes(d);
		param.DP=GetBytes(dp);
		param.DQ=GetBytes(dq);
		param.InverseQ=GetBytes(crt);
	}

	public static void Main(String[] args)
    {
		if(args.Length<2){
			Console.WriteLine("\nRSATest.exe [text明文] [hash算法]。");
			return;
		}
		RSATest rsa=new RSATest();
		rsa.init();
		rsa.DelphiDllTest(args[0],args[1]);
		rsa.DotnetRSATest(args[0],args[1]);
		rsa.InteropTest(args[0],args[1]);
		


	}
	
	public void DelphiDllTest(String text,String alg){
		String res=Cmip_Encrypt(text,e,n);
		Console.WriteLine("=====================Dll调用RSA测试=====================");
		Console.WriteLine("\n1.明文:"+text);
		//加密
		Console.WriteLine("\n2.RSA加密:"+res);	
		res=Cmip_Decrypt(res,d,n);
		Console.WriteLine("\n3.RSA解密:"+res);	
		//签名
		String signdata=Cmip_SignData(text,d,n,alg);
		Console.WriteLine("\n4.对明文采用"+alg.Trim()+"withRSA的签名算法,签名数据为:\n"+signdata);	
		Console.WriteLine("\n5.RSA验证签名:"+Cmip_VerifyData(text,signdata,e,n));	

		Console.WriteLine("\n6.采用HASH算法"+alg+"计算明文的结果:"+Cmip_ComputeHash(text,alg));
	}
	//.net只实现了SHA1的rsa签名算法
	public void  DotnetRSATest(String text,String alg){
		Console.WriteLine("\n\n\n=========.net RSACryptoServiceProvider调用RSA测试=========");
		
		RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
		rsa.ImportParameters(param);
		RSAParameters param1=rsa.ExportParameters(true);

		Console.WriteLine("1.明文:"+text);
		byte[] data=Encoding.Default.GetBytes(text);
		byte[] endata=rsa.Encrypt(data,false);
		Console.WriteLine("\n2.publicKey加密后的数据:"+Convert.ToBase64String(endata));
		byte[] dedata=rsa.Decrypt(endata,false);
		Console.WriteLine("\n3.privateKey解密后的数据:"+Encoding.Default.GetString(dedata));
		//签名
		HashAlgorithm hashalg=null;
		switch(alg.ToUpper()){
			case "MD5":
				hashalg=new MD5CryptoServiceProvider();
				break;
			case "SHA1":
				hashalg=new SHA1CryptoServiceProvider (); ;
				break;
			case "SHA256":
				hashalg=new SHA256Managed();
				break;
			case "SHA384":
				hashalg=new SHA384Managed();
				break;
			case "SHA512":
				hashalg=new SHA512Managed();
				break;
			default:
				throw new Exception("不支持的HASH算法:"+alg);
		}
		try{
			byte[] signdata=rsa.SignData(data,hashalg);
			Console.WriteLine("\n4.对明文采用"+alg.Trim()+"withRSA的签名算法,签名数据为:\n"+Convert.ToBase64String(signdata));	
			Console.WriteLine("\n5.RSA验证签名:"+rsa.VerifyData(data,hashalg,signdata));	
		}catch(CryptographicException ex){
			Console.WriteLine("\n===================================");
			Console.WriteLine("!!!指定的HASH算法在.net中可能未实现!:"+ex.Message+"\n.net可用算法"+rsa.SignatureAlgorithm);
			Console.WriteLine("===================================");
		}
		byte[] hash=hashalg.ComputeHash(data);
		Console.WriteLine("\n6.采用HASH算法"+alg+"计算明文的结果:"+ConvByteArrayToHex(hash));


		String res=Cmip_Decrypt(Convert.ToBase64String(endata),d,n);
		Console.WriteLine("\n"+res);
		Console.WriteLine(Encoding.Default.ToString());

	}
	//dll加密,.net解密
	//dll签名,.net验证
	public void InteropTest(String text,String alg){
		String res=Cmip_Encrypt(text,e,n);
		Console.WriteLine("\n=====================跨语言平台调用RSA测试=====================");
		Console.WriteLine("\n1.明文:"+text);
		//加密
		Console.WriteLine("\n2.DLL RSA加密:"+res);	
		RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
		rsa.ImportParameters(param);
		byte[] txdata=rsa.Decrypt(Convert.FromBase64String(res),false);

		Console.WriteLine("\n3.RSACryptoServiceProvider RSA解密:"+Encoding.Default.GetString(txdata));	
		//dll签名,.net验证
		String signdata=Cmip_SignData(text,d,n,alg);
		Console.WriteLine("\n4.DLL 对明文采用"+alg.Trim()+"withRSA的签名算法,签名数据为:\n"+signdata);	
		//签名
		HashAlgorithm hashalg=null;
		switch(alg.ToUpper()){
			case "MD5":
				hashalg=new MD5CryptoServiceProvider();
				break;
			case "SHA1":
				hashalg=new SHA1CryptoServiceProvider (); ;
				break;
			case "SHA256":
				hashalg=new SHA256Managed();
				break;
			case "SHA384":
				hashalg=new SHA384Managed();
				break;
			case "SHA512":
				hashalg=new SHA512Managed();
				break;
			default:
				throw new Exception("不支持的HASH算法:"+alg);
		}
		try{
			Console.WriteLine("\n5.RSACryptoServiceProvider RSA验证签名:"+rsa.VerifyData(Encoding.Default.GetBytes(text),hashalg,Convert.FromBase64String(signdata)));	
		}catch(CryptographicException ex){
			Console.WriteLine("\n===================================");
			Console.WriteLine("!!!指定的HASH算法在.net中可能未实现!:"+ex.Message+"\n.net可用算法"+rsa.SignatureAlgorithm);
			Console.WriteLine("===================================");
		}
	}

	public static byte[] GetBytes(String num){
		BigInteger n=new BigInteger(num,10);
		String s=n.ToString(2);
		if(s.Length%8>0){
			s=new String('0',8-s.Length%8)+s;
		}
		byte[] data=new byte[s.Length/8];
		String ocetstr;
		for(int i=0;i<data.Length;i++){
			ocetstr=s.Substring(8*i,8);
			data[i]=Convert.ToByte(ocetstr , 2 ) ;
		}
		return data;
	}

	public String ConvByteArrayToHex(byte[] data){
		String s="";
		for(int i=0;i<data.Length;i++){
			s+=Convert.ToString(data[i],16);
		}
		return s.ToUpper();
	}


}

⌨️ 快捷键说明

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