蛙蛙推荐:蛙蛙牌软件注册码算法
摘要:辛辛苦苦写个共享软件,又怕被人破解,所以就会想到用注册码的方式来激活软件。本蛙给大家一个简单的思路来实现软件注册码算法,当然.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. layUI 学习记录
  2. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
  3. 大白话聊聊 Kafka 的架构原理和网络设计,它的性能高在什么地方?
  4. 1390 游戏得分(贪心)
  5. PHP中全局变量$_POST[]和$_GET[]
  6. 伪指令PAGE和TITLE说明
  7. C# 面向对象版 Windows挖雷 v0.8 release 非FloodFill算法解
  8. console.log()中的运算与打印事件
  9. 抖音python上的代码_抖音代码舞「图文推荐」,python实例代码
  10. html网页静态时钟代码,网页时钟实现代码html5
  11. love2d 1. 入门
  12. 计算机上如何转换搜狗,无法切换到搜狗输入法怎么办
  13. 利用Kalibr标定Camera-IMU外参
  14. ctf misc 学习总结大合集
  15. 2021年山东省安全员C证新版试题及山东省安全员C证免费试题
  16. [已解决] c#签名时出错
  17. 6-8 使用函数求最大公约数 (10 分)
  18. AutoCAD Civil 3D-纵断面-创建曲面纵断面与布局纵断面
  19. 怎么在word里标上标和下标?
  20. WPF实现DNA螺旋粒子动画特效

热门文章

  1. 《App Store创赢艺术》读后感
  2. Python3 安装Crypto模块
  3. 关于DDD,个人理解
  4. pheatmap绘制热图
  5. 3 GROM 关联 (golang)
  6. python程序员搞笑段子_程序员的爆笑漫画和段子
  7. bt5更改mysql密码_修改PostgreSQL数据库的默认用户postgres的密码
  8. 使用stm32f103c8实现一个简单的运动会计时器
  9. 生活娱乐 工业机器人代替工人装配鼠标键盘
  10. google protostuff