蛙蛙推荐:蛙蛙牌软件注册码算法
摘要:辛辛苦苦写个共享软件,又怕被人破解,所以就会想到用注册码的方式来激活软件。本蛙给大家一个简单的思路来实现软件注册码算法,当然.net做的东西很容易被人破解,反编译出来把验证注册码的代码一去就算破解了,不过咱不讨论这个先。

思路:
1、首先要取出机器的唯一码,一般都是通过取网卡的MAC地址,CPU编号,硬盘序列号等,.net取这些东西很容易,用WMI接口就O了,取出来之后用MD5取一下摘要信息就算是机器的唯一码了。
2、完了一般要通过电子邮件等手段把机器码发给软件作者,软件作者用一定的算法给这个机器码算出一个注册码。这个算注册码的方式,其实也能很简单,最简单的就是把机器码的自如串按位异或一个key得到一个字符串就可以作为注册码,当然这个key不能告诉别人,或者是把机器码进行若干次的MD5取值,这个若干次也不能告诉别人。本文用的是前者,异或的方式。key是一个长度的,就一个H,大家可以自己编写更强的加密算法。
3、用户拿到注册码之后,在注册界面上输入,点注册按钮要把机器码和注册码发到一个指定的网址去验证注册码是否合法。这个远程的验证网页可以用任何语言来实现,其实就是把机器码用生成注册码的算法算出注册码,然后再和用户提供的注册码来对比,如果匹配就返回注册成功,如果不匹配就返回注册失败。本文用的是Php实现的验证页面,注册成功就返会1,否则返回0

不说了,上代码

public   partial   class  Form3 : Form
{
    private static int key = 72;
    private static string zhuceyonghu = string.Empty;
    public Form3()
    {
        InitializeComponent();
    }

    //验证注册码
    private void button1_Click(object sender, EventArgs e)
    {
        //把机器码和验证码发送到指定验证网址去验证
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
            string.Format(@"http://www.xxx.com/test/jiami.php?s={0}&x={1}",textBox1.Text,textBox2.Text));
        request.Timeout = 8000;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Encoding encoding = Encoding.ASCII;
        StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);
        string str = reader.ReadToEnd().TrimEnd('/n').TrimEnd('/r').Trim();
        response.Close();
        reader.Close();

        //如果返回0表示注册码不对,否则表示验证通过
        if(str=="0")
        {
            MessageBox.Show("注册码不对");
            //Application.Exit();
        }
        else
        {
            MessageBox.Show("OK");
        }

        //以下是c#版的通过机器码算注册码的算法
        //byte[] bs = Encoding.ASCII.GetBytes(textBox1.Text);
        //List<byte> r = new List<byte>();
        //foreach (byte b in bs)
        //{
        //    r.Add((byte)(b ^ key));
        //}
        //textBox2.Text= Convert.ToBase64String(r.ToArray());
    }

    //取CPU编号
    public String GetCpuID()
    {
        try
        {
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();

            String strCpuID = null;
            foreach (ManagementObject mo in moc)
            {
                strCpuID = mo.Properties["ProcessorId"].Value.ToString();
                break;
            }
            return strCpuID;
        }
        catch
        {
            return "";
        }

    }//end method

    //获取网卡mac地址
    public string GetMac()
    {
        try
        {
            ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection queryCollection = query.Get();
            foreach (ManagementObject mo in queryCollection)
            {
                if (mo["IPEnabled"].ToString() == "True")
                    return mo["MacAddress"].ToString();
            }
            return "";
        }
        catch 
        {
            return "";
        }
    }

    //取出机器唯一码显示给用户
    private void Form3_Load(object sender, EventArgs e)
    {
        
        //1、取出机器唯一码
        string input = GetCpuID() + GetMac();
        //2、如果取唯一码出错,直接退出
        if(input.Length < 5)
        {
            MessageBox.Show("程序出错,即将退出");
            Application.Exit();
        }
        //3、取出机器唯一码的摘要并转换成字符串
        System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = md5.ComputeHash(Encoding.ASCII.GetBytes(input));
        zhuceyonghu =  BitConverter.ToString(bs).Replace("-", "").ToLower();

        textBox1.Text =zhuceyonghu;
    }
}

注册码验证页面

<? php  
function  xorEncoding( $string , $key ){
    $encoding = "" ;
    for ( $i = 0 ; $i < strlen ( $string ); $i ++ ){  
        $encoding = $encoding . ( $string [ $i ] ^ $key );
   }
    return   base64_encode ( $encoding );
}
$s = $_GET [ ' s ' ];
$k = " H " ;
$estr = xorEncoding( $s , $k );  // 加密
if ( $estr == $_GET [ ' x ' ]){
echo   " 1 " ;
} else
{
  echo   " 0 " ;
}
?>  

相关度链接:
.NET MD5 与 PHP MD5
http://www.phpchina.com/1703/viewspace_10146.html
php异或加密信息
http://hi.baidu.com/bluefrog/blog/item/e2979725ca76426434a80fd0.html
“简单异或”加密算法的破解技术演示程序
http://www.cnblogs.com/sumtec/articles/30855.html
遇见一个GET参数问题!请求帮助,急急在先等到100分!!!  
http://topic.csdn.net/u/20070110/10/8a334e64-58f1-4387-ab12-efbce6983544.html
用什么语句能让C#取出网卡的MAC地址?
http://n.dvbbs.net/topic/t555312
Net中获取CPU编号
http://www.cnblogs.com/Tonyyang/archive/2007/04/24/725734.html
用.net 中的MD5实现php的md5()
http://www.cnblogs.com/geel/archive/2004/10/24/56218.html
ASCII码表
http://www.96yx.com/tool/ASC2.htm

蛙蛙推荐:蛙蛙牌软件注册码算法相关推荐

  1. C#实现软件注册码算法

    Microsoft.Net的应用程序的代码文件,与Java生成的文件类似,它们都没有本地代码,而是一种类似于汇编的代码.这样,只要有合适的工具,就可以完整的把别人写出来的程序反编译成自己需要的程序文件 ...

  2. 蛙蛙推荐:蛙蛙牌网页捕捉器

    蛙蛙推荐:蛙蛙牌网页捕捉器 摘要:你有没有看到一篇好文章想保存到本地,有没有想过只保存网页选中的部分而不要那些不必要的导航和广告,本贴告诉你达到这个目的的思路及主要代码. 思路:首先我们要获取到所有I ...

  3. 蛙蛙推荐:蛙蛙牌广告鼓励算法

    摘要:不知道有多少人去研究google,阿里妈妈的广告作弊算法,抓包.分析http头,分析参数,分析cookies,甚至分析鼠标的点击序列,写钩子用程序去点广告,或者去模仿用户行为,我说这太麻烦了.不 ...

  4. 蛙蛙推荐:蛙蛙浏览器

    蛙蛙推荐:蛙蛙浏览器 摘要:google推出了自己的网页浏览器,现在web浏览器的竞争更激烈了,各有各的用户群.其实有另一个领域没有多少竞争,那就是应用程序浏览器,今天给大家演示的蛙蛙浏览器,不仅可以 ...

  5. 蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园

    蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园 蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园 蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一 ...

  6. 蛙蛙推荐:蛙蛙教你文本聚类

    蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这 ...

  7. 家用台式计算机需要安装的软件,新的电脑应该安装哪些应用?推荐这9个软件够你用一生!...

    原标题:新的电脑应该安装哪些应用?推荐这9个软件够你用一生! 很多人以为买了新的电脑,就像买了新手机一样,一次性把自己想要的软件全部安装到电脑上,懂的人还知道把已下载的应用安装到D盘,不懂得直接跟着步 ...

  8. 5款值得推荐的工具和软件,让你的工作效率翻倍

    现在,有很多实用的工具和软件可以帮助我们更高效地完成各种任务.以下是几个值得推荐的工具和软件,能够极大地提高我们的工作效率. 1.视频播放软件--VLC media player VLC是一款视频播放 ...

  9. 马斯克推荐加密通讯聊天软件Signalv5.13.8跨平台国际版几何管家出品

    手机软件 - 技术教程 - 电脑软件 - 7月 15, 2021 软件介绍 Signal 是由 Signal Foundation 和 Signal Messenger LLC 开发的跨平台加密消息通 ...

最新文章

  1. 人工智能与制造业融合有多难?我国人工智能人才缺口达30万
  2. copy()与deepcopy()
  3. 第十一届蓝桥杯java B组第二场-试题A: 门牌制作
  4. 净利润跌幅超六成,坚持要做“鸭中星巴克”的周黑鸭怎么了?
  5. Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO
  6. java分装_Java ——Number Math 类 装箱 拆箱 代码块
  7. python怎样导出py文件_导出python模块(到字符串或py文件)
  8. MySQL备份与恢复——基于Xtrabackup物理备份恢复
  9. mysql 多数据源多主一从复制
  10. 在哪里可以运行EJB?
  11. 计算机科学速成课18:操作系统
  12. C#:生成哈希字符串
  13. Jquery图片放大镜效果
  14. Python入门经典(2K超清)
  15. mysql下载jdbc
  16. 动易html在线编辑器,动易CMS静态页调用FCK编辑器的代码
  17. MySQL按时间点、时间段查询
  18. Android studio中assets文件更换之后不生效
  19. java 区分中英文_Java 区分文本中的中英文字符函数
  20. Difference between Triplets POJ - 3244

热门文章

  1. python repr函数
  2. bim技术的发展趋势是哪些方向?
  3. 计算机实践的重要性1
  4. 怎样才算高级Java开发工程师_怎样才能成为一名高级java软件工程师?
  5. 利用crontab实现SVN的自动化备份
  6. java开发周报_java第六周周报
  7. mesh collider
  8. 转windows7下制作苹果mac os x 10.10Yosemiteu盘启动盘
  9. 修改转移表空间些许操作
  10. EN 14195石膏板系统金属框架部件—CE认证