前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VB.NET 软件注册码设计

VB.NET 软件注册码设计

作者头像
一线编程
发布2020-12-22 15:31:06
1.8K0
发布2020-12-22 15:31:06
举报
文章被收录于专栏:办公魔盒办公魔盒

来来来,先看结果吧!

客户端效果

注册机效果

再看看动画注册过程吧!

主要内容:

第一步,通过获取CPU的ID,硬盘ID,MAC地址,然后合成一个字符串,再使用DES方式加密字符串,再截取前面25位,后生成机器码

代码语言:javascript
复制
''微信公众号关注:VB小源码
''QQ群:344402874
''博客:https://www.cnblogs.com/vbee/
''个人微信:vbee_club

Imports System.IO
Imports System.Management
Imports System.Security.Cryptography
Imports System.Text

''' <summary>
''' DES加密解密类
''' </summary>
Public Class Cls_des
  ''' <summary>
  ''' 密码
  ''' </summary>
  Private pass_key As String = "00000000"

  ''' <summary>
  ''' 初始化
  ''' </summary>
  ''' <param name="key"></param>
  Public Sub New(Optional key As String = "r9j8w5ed")
    pass_key = key
  End Sub

  ''' <summary>
  ''' DES加密
  ''' </summary>
  ''' <param name="str_s"></param>
  ''' <returns></returns>
  Public Function DesEncrypt(str_s As String) As String
    Dim byts As Byte() = Encoding.UTF8.GetBytes(pass_key.Substring(0, 8))
    Dim IV As Byte() = byts
    Dim bytes As Byte() = Encoding.UTF8.GetBytes(str_s)
    Dim descPro As DESCryptoServiceProvider = New DESCryptoServiceProvider()
    Dim mStr As MemoryStream = New MemoryStream()
    Dim cStream As CryptoStream = New CryptoStream(mStr, descPro.CreateEncryptor(byts, IV), CryptoStreamMode.Write)
    cStream.Write(bytes, 0, bytes.Length)
    cStream.FlushFinalBlock()
    Return Convert.ToBase64String(mStr.ToArray())
  End Function

  ''' <summary>
  ''' des解密
  ''' </summary>
  ''' <param name="dstr"></param>
  ''' <returns></returns>
  Public Function DesDecrypt(dstr As String) As String
    Dim byts As Byte() = Encoding.UTF8.GetBytes(pass_key.Substring(0, 8))
    Dim IV As Byte() = byts
    Dim arr As Byte() = Convert.FromBase64String(dstr)
    Dim dSerPro As DESCryptoServiceProvider = New DESCryptoServiceProvider()
    Dim mStream As MemoryStream = New MemoryStream()
    Dim cStream As CryptoStream = New CryptoStream(mStream, dSerPro.CreateDecryptor(byts, IV), CryptoStreamMode.Write)
    cStream.Write(arr, 0, arr.Length)
    cStream.FlushFinalBlock()
    Return Encoding.UTF8.GetString(mStream.ToArray())
  End Function


End Class

''' <summary>
''' 获取机器码
''' </summary>
Public Class Cls_MachineCode

  ''' <summary>
  ''' 获取CPU_ID
  ''' </summary>
  ''' <returns></returns>
  Public Function GetCpuInfo() As String
    Dim txt As String = " "
    Using mClass As ManagementClass = New ManagementClass("Win32_Processor")
      Dim insts As ManagementObjectCollection = mClass.GetInstances()
      For Each mObject As ManagementBaseObject In insts
        Dim maObject As ManagementObject = CType(mObject, ManagementObject)
        txt = maObject.Properties("ProcessorId").Value.ToString()
        maObject.Dispose()
      Next
    End Using
    Return txt.ToString()
  End Function

  ''' <summary>
  ''' 获取硬盘ID
  ''' </summary>
  ''' <returns></returns>
  Public Function GetHDid() As String
    Dim txt As String = " "
    Using mClass As ManagementClass = New ManagementClass("Win32_DiskDrive")
      Dim insts As ManagementObjectCollection = mClass.GetInstances()
      For Each mBaseObject As ManagementBaseObject In insts
        Dim mObject As ManagementObject = CType(mBaseObject, ManagementObject)
        txt = CStr(mObject.Properties("Model").Value)
        mObject.Dispose()
      Next
    End Using
    Return txt.ToString()
  End Function

  ''' <summary>
  ''' 获取MAC地址
  ''' </summary>
  ''' <returns></returns>
  Public Function GetMoAddress() As String
    Dim txt As String = " "
    Using mClass As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
      Dim insts As ManagementObjectCollection = mClass.GetInstances()
      For Each mBaseObject As ManagementBaseObject In insts
        Dim mObject As ManagementObject = CType(mBaseObject, ManagementObject)
        Dim fg As Boolean = mObject("IPEnabled")
        If fg Then
          txt = mObject("MacAddress").ToString()
        End If
        mObject.Dispose()
      Next
    End Using
    Return txt.ToString()
  End Function

  ''' <summary>
  ''' 生成机器码
  ''' </summary>
  ''' <returns></returns>
  Public Function GenerateMachineCode() As String
    Dim des As New Cls_des
    Dim cpu_id As String = GetCpuInfo()
    Dim text As String = des.DesEncrypt(cpu_id & GetHDid() & GetMoAddress())
    Dim text2 As String = text.Substring(0, 25)
    text2 = text2.ToUpper()
    Return String.Concat(New String() {text2.Substring(0, 5), "-", text2.Substring(5, 5), "-", text2.Substring(10, 5), "-", text2.Substring(15, 5), "-", text2.Substring(20, 5)})
  End Function
End Class

第二步,通过机器码到注册机端,把机器码当作RSA密钥生成注册码

代码语言:javascript
复制
''微信公众号关注:VB小源码
''QQ群:344402874
''博客:https://www.cnblogs.com/vbee/
''个人微信:vbee_club


Imports System.Security.Cryptography
Imports System.Text

Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    '公钥
    Dim s As String = "PFJTQUtleVZhbHVlPjxNb2R1bHVzPjdpSG91UlluMCtDc0NvaHhVamt3MmllVlRRek1TWjFNR2RqUlFvdVZwc2VQeWVnWVQvUHEyOWh2Nm9TNG5CVjRrcGsybG10dnJ4VlI2TUJ0NHhvM1BGTnR6d05JY1RtYmthNElHaUd2MjVCSDE3NHJITS92dDVZd1lrVTNIRjRBWmFiMzFFOTUzQWUzRUpESm1uYXo5UzRGNnF4NHE1bFE0SFAxbDY1SC9CVT08L01vZHVsdXM+PEV4cG9uZW50PkFRQUI8L0V4cG9uZW50PjwvUlNBS2V5VmFsdWU+"
    Dim en_cont As String = String.Empty
    Using rsa As New RSACryptoServiceProvider()
      rsa.FromXmlString(Encoding.Default.GetString(Convert.FromBase64String(s)))
      Dim en_data As Byte() = rsa.Encrypt(Encoding.Default.GetBytes(TextBox1.Text), False)
      en_cont = Convert.ToBase64String(en_data)
    End Using
    RichTextBox1.Text = en_cont
  End Sub
End Class

第三步,在客户端再次通过注册码与机器码,进行RSA验证,当然这里没有使用签名SIGN验证,在实际开发中,请自行进行验证

代码语言:javascript
复制
''微信公众号关注:VB小源码
''QQ群:344402874
''博客:https://www.cnblogs.com/vbee/
''个人微信:vbee_club

Imports System.Security.Cryptography
Imports System.Text

Public Class Form1
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If My.Settings.reg = True Then
      Button1.Enabled = False
      Button2.Enabled = True
      Label4.Text = "已注册"
    Else
      Label4.Text = "未注册"
    End If

  End Sub

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If TextBox1.Text = "" Then
      Button3_Click(sender, e)
    End If
    Try

      '私钥
      Dim s As String = "PFJTQUtleVZhbHVlPjxNb2R1bHVzPjdpSG91UlluMCtDc0NvaHhVamt3MmllVlRRek1TWjFNR2RqUlFvdVZwc2VQeWVnWVQvUHEyOWh2Nm9TNG5CVjRrcGsybG10dnJ4VlI2TUJ0NHhvM1BGTnR6d05JY1RtYmthNElHaUd2MjVCSDE3NHJITS92dDVZd1lrVTNIRjRBWmFiMzFFOTUzQWUzRUpESm1uYXo5UzRGNnF4NHE1bFE0SFAxbDY1SC9CVT08L01vZHVsdXM+PEV4cG9uZW50PkFRQUI8L0V4cG9uZW50PjxQPi82K0F3Y21HTlAyUk9SM21QWjJpaU9TdUt3Q2o3c2xNMFV6c1BQU2N4bEdZU01kelUxSVV4b3FzNmVYeDB6ZTNyeC9OSWVwQlpwYk5kZG1uSzVnM3h3PT08L1A+PFE+N216aFFXOTFFcWR6RHgyTE5qTStMRU96T0lWWGhFRTREWVBlVUJ4UjZvdlBEeDQ3bXpMclVyeHlRdzFmdFJIZkoweHdPajg0bHk5YzdWbHRJZEdGUXc9PTwvUT48RFA+blRQa3NFRWRXTnRHUEozYmY2cTUwZnozOE15Vi9peWFKRjF0S2hVamh2T0g4OGRkYXE4ZXd1dGtZUExWK2cxWnpEeDdQUXp3WlFqM0RpeGlFZldtNVE9PTwvRFA+PERRPmVvd0NGNVVITXFoWXJsczhFNGF4SFNWSzkvRXBjM1BtTUtRbjN6cy9LM1BpNEYxa3U3ZW5WcVkvZ0pGZU1QNVhtYVpqUkx6OEJGRTJ6VlFha0xoVmF3PT08L0RRPjxJbnZlcnNlUT5pbysydmd1ekM3Y3U3VmV3bkt1TGdGM2JwajlRL3VHZG80K0dnc0xTVThGTllQL1QweTR4S0plZnArQlJ2dWVwL05icWlGc3hHcmJxWFB6OWJvbHZVQT09PC9JbnZlcnNlUT48RD5lV3d1NTFsbHU0Sy9GcXZWNUpBbTJjWC9PZ2VCanpPMm55TlFLSGRXT25GZFh4MktjQkkydWh6VmpDWmFuN1BQQkNrOWpWdUEyaXlyMUZ0eWJLOXNZOGxQeUoyVVJKYTVHZ1pEWWVzdVhJa290TWVwbGFaeGMvZk90V1QvaXFEU3pBdHpmRDNBL1BmS2VySm1qRStOUzBldG81TGtucTNwLzhYeCtOMkcxVzA9PC9EPjwvUlNBS2V5VmFsdWU+"
      Dim de_cont As String = String.Empty
      Using rsa As New RSACryptoServiceProvider()
        rsa.FromXmlString(Encoding.Default.GetString(Convert.FromBase64String(s)))
        Dim de_data As Byte() = rsa.Decrypt(Convert.FromBase64String(RichTextBox1.Text), False)
        de_cont = Encoding.GetEncoding("GB2312").GetString(de_data)
      End Using

      Dim fg As Boolean = de_cont = TextBox1.Text
      If fg Then
        My.Settings.reg = True
        My.Settings.Save()
        Button1.Enabled = False
        Button2.Enabled = True
        Label4.Text = "已注册"
        MessageBox.Show("注册验证成功")
      Else
        My.Settings.reg = False
        My.Settings.Save()
        Button1.Enabled = True
        Button2.Enabled = False
        MessageBox.Show("注册验证失败")
      End If
    Catch ex As Exception
      My.Settings.reg = False
      My.Settings.Save()
      Button1.Enabled = True
      Button2.Enabled = False
      MessageBox.Show("注册验证失败")
    End Try
  End Sub

  Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

  End Sub

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    My.Settings.reg = False
    My.Settings.Save()
    Label4.Text = "未注册"
    Button1.Enabled = True
    Button2.Enabled = False
  End Sub

  Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim mc As New Cls_MachineCode
    TextBox1.Text = mc.GenerateMachineCode()
  End Sub

  Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click

  End Sub
End Class

好了就介绍这么多吧,不懂就看下面案例吧,有错请各位指出.

案例下载:

代码语言:javascript
复制
https://vbee.lanzous.com/ikacxja8uob
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档