请问下我做了WinForm程序,如果我想授权的话 我应该如何做如何指定我的程序对方是否可用

请问下我做了WinForm程序,如果我想授权的话 我应该如何做如何指定我的程序对方是否可用,第1张

第一步:生成一组公钥和私钥,公钥用于你发布程序,私钥属于注册码生成。view plaincopy to clipboardprint
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// 公钥
string pubkey = rsaToXmlString(false);

// 私钥
string prikey = rsaToXmlString(true);
//如果是webForm就ResponseWrite(pubkey + ”<br/>” + prikey); 下
//如果是winForm就MessageBoxShow("公钥:" + pubkey + "\r\n私钥:" + prikey); 下
}
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// 公钥
string pubkey = rsaToXmlString(false);
// 私钥
string prikey = rsaToXmlString(true);
//如果是webForm就ResponseWrite(pubkey + ”<br/>” + prikey); 下
//如果是winForm就MessageBoxShow("公钥:" + pubkey + "\r\n私钥:" + prikey); 下
}第二步:取得机器硬件编码。我选用CUP的编号。view plaincopy to clipboardprint
/// <summary>
/// 获取CPU编号
/// </summary>
/// <returns></returns>
public string GetCpuId()
{
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mcGetInstances();
String strCpuID = null;
foreach (ManagementObject mo in moc)
{
strCpuID = moProperties["ProcessorId"]ValueToString();
break;
}
return strCpuID;
}
/// <summary>
/// 获取CPU编号
/// </summary>
/// <returns></returns>
public string GetCpuId()
{
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mcGetInstances();
String strCpuID = null;
foreach (ManagementObject mo in moc)
{
strCpuID = moProperties["ProcessorId"]ValueToString();
break;
}
return strCpuID;
}第三步:编写注册码生成WinForm程序,使用CUP的编号来生成注册码,当然你也可以用 WebForm来写。view plaincopy to clipboardprint
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsaFromXmlString(“私钥”);
// 加密对象
RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
fSetHashAlgorithm("SHA1");
byte[] source = SystemTextASCIIEncodingASCIIGetBytes(“CUP的编号”);
SHA1Managed sha = new SHA1Managed();
byte[] result = shaComputeHash(source);

byte[] b = fCreateSignature(result);

msgText = ConvertToBase64String(b); //这里就得到了string形式的注册码
//再接下来你可以把生成的注册码保存成licenselic文件,licenselic文件也没什么特别的格式就是相当于把注册吗保存到一个txt文件中,无非这个txt文件的后缀改成了lic,你要高兴也可保存成其它多种格式。
//也可以保存在注册表中或是webconfig中,总之能让你的发布的应用程序能读的到就行。
}
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsaFromXmlString(“私钥”);
// 加密对象
RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
fSetHashAlgorithm("SHA1");
byte[] source = SystemTextASCIIEncodingASCIIGetBytes(“CUP的编号”);
SHA1Managed sha = new SHA1Managed();
byte[] result = shaComputeHash(source);
byte[] b = fCreateSignature(result);
msgText = ConvertToBase64String(b); //这里就得到了string形式的注册码
//再接下来你可以把生成的注册码保存成licenselic文件,licenselic文件也没什么特别的格式就是相当于把注册吗保存到一个txt文件中,无非这个txt文件的后缀改成了lic,你要高兴也可保存成其它多种格式。
//也可以保存在注册表中或是webconfig中,总之能让你的发布的应用程序能读的到就行。
}第四步:在发布的程序相关地方添加对注册码有效性的验证。如添加在程序启动的时候,程序执行特定 *** 作的时候等等,总之看你的需要做有效性的验证。view plaincopy to clipboardprint
//相关注册码获取代码……
//以下代码是发布程序使用公钥对注册码进行验证
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsaFromXmlString(“公钥”);
RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa);

fSetHashAlgorithm("SHA1");

byte[] key = ConvertFromBase64String(“注册码”);

SHA1Managed sha = new SHA1Managed();
byte[] name = shaComputeHash(ASCIIEncodingASCIIGetBytes(“注册码”));
if(fVerifySignature(name,key))
msgText = "验证成功"; //可以return true;等方式返回相应的状态
else
msgText = "不成功";
}

以上就是关于请问下我做了WinForm程序,如果我想授权的话 我应该如何做如何指定我的程序对方是否可用全部的内容,包括:请问下我做了WinForm程序,如果我想授权的话 我应该如何做如何指定我的程序对方是否可用、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9520960.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存