来来来,先看结果吧!
客户端效果
注册机效果
再看看动画注册过程吧!
主要内容:
第一步,通过获取CPU的ID,硬盘ID,MAC地址,然后合成一个字符串,再使用DES方式加密字符串,再截取前面25位,后生成机器码
''微信公众号关注: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密钥生成注册码
''微信公众号关注: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验证,在实际开发中,请自行进行验证
''微信公众号关注: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
好了就介绍这么多吧,不懂就看下面案例吧,有错请各位指出.
案例下载:
https://vbee.lanzous.com/ikacxja8uob