軟體加認證
要實現軟體注冊功能,首先需要知道實現注冊機制要涉及到的幾個問題:1、如何加入注冊檢測,判斷軟體是否注冊;2、如何生成注冊碼,如何保證一個用戶名只生成與之唯一對應的注冊碼;3、在軟體不注冊情況下,如何限制軟體功能的局限性;4、對已經負費使用用戶而言,不應造成使用不便。
首先,應該有一個生成注冊碼的演算法,以下是我簡單的一個生成15位注冊碼的演算法:
//該函數返回一個CSTRING類型的15位注冊碼,入口參數為用戶名
CString GetRegPasswd(CString &DirName)
{
//將用戶名換算成15位注冊碼
long Num1,Num2,Num3;
char sn[16]={0};
CString p;
int i,len;
Num1=0;
Num2=0;
Num3=0;
len=int(strlen(DirName));
if(len!=0)
{
for( i=1;i<=len;i++)
{
//第一步演算法
Num1=(long(Num1+(int(DirName[i-1])*i*i)*(i*sqrt(DirName[i-1])+1)))%100000;
//第二步演算法
Num2=(Num2*i+(long(pow((int)DirName[i-1],2)*i)))%100000;
//第三步演算法
Num3=(Num2+(long)sqrt(Num1))%100000;
}
//以下把三個演算法結果分別生成5個字元,共有15個
for(i=0;i<5;i++)
sn[i]=(int)(Num1+31+i*i*i)%128;
for(i=5;i<10;i++)
sn[i]=(int)(Num2+31+i*i*i)%128;
for(i=10;i<15;i++)
sn[i]=(int)(Num3+31+i*i*i)%128;
sn[15]=0;
//以下循環把所有生成的字元轉換為0---9,A---Z,a----z
for(i=0;i<15;i++)
{
while((sn[i]<'0' || sn[i]>'9') && (sn[i]<'A' || sn[i]>'Z') &&(sn[i]<'a' || sn[i]>'z') )
{
sn[i]=(sn[i]+31+7*i)%128;
}
}
//賦值給一個CSTRING變數,用做函數返回值
p.Format("%s",sn);
}
return p;
}
//檢查軟體是否注冊的函數
BOOL GetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;
CString str;
str.LoadString(IDS_REG_KEY);// IDS_REG_KEY為在注冊表中的子目錄字元串
if (RegCreateKey(HKEY_CURRENT_USER, str, &hKey) != ERROR_SUCCESS) return false;
DWORD cbA;
cbA=sizeof(int);
if( RegQueryValueEx(hKey, "SzMima",NULL,NULL, &i,&cbA) != ERROR_SUCCESS)
return false;
BYTE j=i;
if(j==0)//0代表軟體已經注冊,可以正常使用
{
RegCloseKey(hKey);
return true;
}
else
{
RegCloseKey(hKey);
return false;
}
return false;
};
//設置軟體已經注冊標志的函數
BOOL SetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;
CString str;
str.LoadString(IDS_REG_KEY);// IDS_REG_KEY為在注冊表中的子目錄字元串
if (RegCreateKey(HKEY_CURRENT_USER, str, &hKey) != ERROR_SUCCESS) return false;
BYTE j=0;//0代表已經注冊
if(RegSetValueEx(hKey, "SzMima", 0, REG_BINARY, &j,4) != ERROR_SUCCESS)
{
AfxMessageBox("設置注冊表數據失敗!");
return FALSE;
}
return false;
};
以上三個函數即可實現軟體注冊機制,只需要在程序初始化的時候加入以下幾句代碼即可
BOOL bReg= GetRegFlag ();
if(!bReg)
{
//在此加入限制功能或者拒絕是使用的代碼
}
如果用戶注冊只需要加入以下代碼即可
//這是我的程序中的一個注冊界面,輸入用戶名和注冊碼提交後檢驗注冊碼是否正確的代碼
void CRegEdit::OnBnClickedOk()
{
if(!UpdateData()) return;//取得編輯框的內容,並賦值到類變數中
m_RegUser.TrimLeft();//m_RegUser是用戶名
m_RegUser.TrimRight();
if(m_RegUser.IsEmpty())
{
AfxMessageBox("用戶名不能為空,請重新輸入。");
GetDlgItem(IDC_REGUSER)->SetFocus();
return;
}
m_RegPasswd.TrimLeft();m_RegPasswd是注冊碼
m_RegPasswd.TrimRight();
if(m_RegPasswd.IsEmpty())
{
AfxMessageBox("注冊碼不能為空,請重新輸入。");
GetDlgItem(IDC_REGPASSWD)->SetFocus();
return;
}
CString Passwd;
Passwd=GetRegPasswd(m_RegUser);//調用演算法取得該用戶名的注冊碼
if(Passwd==m_RegPasswd)//與用戶輸入的注冊進行比較
{
SetRegFlag();//設置注冊標志
OnOK();
}
else
AfxMessageBox("注冊碼錯誤,請重新輸入。");
UpdateData(false);
}
RSA做軟體的注冊功能,如果密鑰設置的比較大位數的話,基本別人是無法寫出注冊機的,但是防止別人暴破你的程序又是另一回事了。
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Imports System.Xml
Public Class FrmReg
Inherits System.Windows.Forms.Form
'Dim xmlKeys As String 'A combination of both the public and 'private keys
'Dim xmlPublicKey As String 'The public key only
''The plaintext message in a byte array
'Dim PlainTextBArray As Byte()
''The cyphertext message in a byte array
'Dim CypherTextBArray As Byte()
#Region " Windows 窗體設計器生成的代碼 "
Public Sub New()
MyBase.New()
'該調用是 Windows 窗體設計器所必需的。
InitializeComponent()
'在 InitializeComponent() 調用之後添加任何初始化
End Sub
'窗體重寫 dispose 以清理組件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗體設計器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下過程是 Windows 窗體設計器所必需的
'可以使用 Windows 窗體設計器修改此過程。
'不要使用代碼編輯器修改它。
Friend WithEvents btnReg As System.Windows.Forms.Button
Friend WithEvents btnexit As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents txtRegCode As System.Windows.Forms.TextBox
Friend WithEvents txtRegName As System.Windows.Forms.TextBox
Friend WithEvents LinkLabel1 As System.Windows.Forms.LinkLabel
Private Sub InitializeComponent()
Me.btnReg = New System.Windows.Forms.Button
Me.btnexit = New System.Windows.Forms.Button
Me.txtRegName = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.Label2 = New System.Windows.Forms.Label
Me.txtRegCode = New System.Windows.Forms.TextBox
Me.LinkLabel1 = New System.Windows.Forms.LinkLabel
Me.SuspendLayout()
'
'btnReg
'
Me.btnReg.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnReg.Location = New System.Drawing.Point(64, 192)
Me.btnReg.Name = "btnReg"
Me.btnReg.Size = New System.Drawing.Size(75, 24)
Me.btnReg.TabIndex = 0
Me.btnReg.Text = "注冊(&R)"
'
'btnexit
'
Me.btnexit.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnexit.Location = New System.Drawing.Point(168, 192)
Me.btnexit.Name = "btnexit"
Me.btnexit.Size = New System.Drawing.Size(75, 24)
Me.btnexit.TabIndex = 1
Me.btnexit.Text = "取消(&C)"
'
'txtRegName
'
Me.txtRegName.Location = New System.Drawing.Point(8, 24)
Me.txtRegName.Name = "txtRegName"
Me.txtRegName.Size = New System.Drawing.Size(296, 21)
Me.txtRegName.TabIndex = 2
Me.txtRegName.Text = ""
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 0)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(48, 16)
Me.Label1.TabIndex = 3
Me.Label1.Text = "注冊名:"
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(8, 56)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(56, 16)
Me.Label2.TabIndex = 4
Me.Label2.Text = "注冊碼:"
'
'txtRegCode
'
Me.txtRegCode.Location = New System.Drawing.Point(8, 80)
Me.txtRegCode.Multiline = True
Me.txtRegCode.Name = "txtRegCode"
Me.txtRegCode.Size = New System.Drawing.Size(296, 104)
Me.txtRegCode.TabIndex = 5
Me.txtRegCode.Text = ""
'
'LinkLabel1
'
Me.LinkLabel1.Location = New System.Drawing.Point(128, 56)
Me.LinkLabel1.Name = "LinkLabel1"
Me.LinkLabel1.Size = New System.Drawing.Size(128, 16)
Me.LinkLabel1.TabIndex = 6
Me.LinkLabel1.TabStop = True
Me.LinkLabel1.Text = "http://Testbug.Net"
'
'FrmReg
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(306, 223)
Me.Controls.Add(Me.LinkLabel1)
Me.Controls.Add(Me.txtRegCode)
Me.Controls.Add(Me.txtRegName)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.btnexit)
Me.Controls.Add(Me.btnReg)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.Name = "FrmReg"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "RSA&MD5注冊例子程序 by www.TestBug.net"
Me.TopMost = True
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnexit.Click
Application.Exit()
End Sub
Private Sub btnReg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReg.Click
If txtRegName.Text = "" Then
MessageBox.Show("注冊名不能為空", "提示")
Return
Else
If txtRegCode.Text = "" Then
MessageBox.Show("注冊碼不能為空", "提示")
Return
Else
If txtRegCode.Text.Length <> 172 Then
MessageBox.Show("注冊碼長度不對", "提示")
Return
End If
End If
End If
Try
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider = New System.Security.Cryptography.RSACryptoServiceProvider
'公鑰
RSA.FromXmlString("xzALwAOqEcj8jWrKXyaecAhyz9W+++Faaw/=AQAB")
Dim RSADeformatter As System.Security.Cryptography.RSAPKCS1SignatureDeformatter = New System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA)
'指定解密的時候HASH演算法為MD5
RSADeformatter.SetHashAlgorithm("MD5")
Dim Regcode As Byte() = Convert.FromBase64String(txtRegCode.Text)
Dim RegName As Byte() = (New System.Text.ASCIIEncoding).GetBytes(txtRegName.Text)
Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(txtRegName.Text)
Dim hash As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
'驗證簽名
If RSADeformatter.VerifySignature(hash, Regcode) Then
'注冊通過的話就寫入注冊文件
Dim textWriter As XmlTextWriter = New XmlTextWriter("reg.xml", Nothing)
textWriter.WriteStartElement("RegInfo")
textWriter.WriteStartElement("RegName")
textWriter.WriteString(txtRegName.Text)
textWriter.WriteEndElement()
textWriter.WriteStartElement("RegCode")
textWriter.WriteString(txtRegCode.Text)
textWriter.WriteEndElement()
textWriter.Close()
MessageBox.Show("注冊正確,謝謝注冊本軟體,請重新啟動程序完成注冊", "提示")
Application.Exit()
Else
MessageBox.Show("錯誤的注冊碼", "提示")
End If
Catch ex As Exception
'MessageBox.Show(ex.Message())
MessageBox.Show("錯誤的注冊碼", "提示")
End Try
End Sub
Private Sub FrmReg_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Application.Exit()
End Sub
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
System.Diagnostics.Process.Start("http://testbug.net")
End Sub
End Class
㈡ 軟體如何加網路驗證
這個可以直接用乾坤雲驗證或者簡易雲驗證 直接網路就行了 官網就有了 一鍵加密 很強 很好用 我自己都在用
㈢ 如何給成品的EXE軟體加網路驗證
登錄極樂網路驗證,登錄管理端,然後添加軟體
添加軟體後,點擊防護設置,進去成品軟體處理區域,選擇對應的客戶端模式,有卡密模式和用戶模式,可根據要求自行選擇,選擇後點擊下面的選擇軟體按鈕
㈣ 給軟體加網路驗證驗證 給軟體加收費系統
簡易雲網路驗證 乾坤雲驗證都可以達到你的要求 搜一下即可
㈤ 在軟體中加入實名認證功能,有什麼實名認證系統推薦嗎
比如我自己比較熟悉的雲脈實名認證系統,主要以人臉識別技術為核心,輔以身份證識別技術。進行實名認證時,用戶要先利用雲脈身份證識別技術上傳身份證信息,然後通過人臉識別技術、活體檢測技術來驗證用戶身份是否真實,再通過人證比對達到人證合一的目的...希望幫到題主...
㈥ 軟體公司要參加投標一般需要什麼認證,怎麼辦理
雙軟認證申請材料:
2、軟體評測報告
3、上年度12月份資產負回債表、損益表、現金答流量表復印件各三份加蓋財務章
4、營業執照副本復印件
5、企業總人數在20人以下的須提供50%企業大專以上人員的學歷復印件;如企業全部人員超過20人,列出企業人員名單一份(包括姓名、畢業學校、學歷)
6、上一年度12月份科研開發成本明細帳,帳頁最後一頁復印件一份並加蓋財務章;
7、按要求提供軟體銷售發票復印件一套(3-4張)以及對應的合同復印件。
(6)軟體加認證擴展閱讀
軟體企業認定標准(部分)
(1)在我國境內依法設立的企業法人;
(2)具有軟體產品質量和技術服務質量保證的手段與能力;
(3)軟體技術及產品的研究開發經費占企業年軟體收入8%以上;
(4)企業產權明晰,管理規范,遵紀守法。
㈦ 如何在自己做的軟體上加網路驗證
簡單
設置個變數 A 文本行 用來在網上讀取密碼
A=到文本(HTTP讀文件("網站"))
然後用判斷命令判斷 A和預先設置的密碼是否一樣..
㈧ 如何為手機軟體增加證書
可以去手機樂園在線製作軟體簽名,先注冊免費帳號,提交需要簽名的軟體即可專
www.shouji.com.cn
而且可以下載手機軟屬件,主題,鈴聲等
㈨ 如何為軟體申請加入數字證書
一、手機軟體
以Java手機軟體為例:
使用JADgen根據JAR文件自動生成JAD描述文件
使用方法一:打開JADgen.exe,只要把JAR文件拖到這個程序的圖標上面就會自動生成一個JAD文件
使用方法二:運行這個程序。將JAR路徑復制到這個程序的 "Select JAR-file"的文本框,點擊Generate JAD就會生成一個JAD文件
PS:win7和win8的拖過去不行,需要使用第二種方法。
其他的手機軟體格式,比如塞班s60 v3的,可以用自由簽名;安卓的用AndroidResEdit;……
二、電腦軟體
1. 購買或自己創立一個的數字簽名證書文件。
有工具軟體可以製作數字簽名證書,比如openssl。但自簽的,在別人的機器上,會出現簽名無法校驗的問題。除非人家信任,否則人家不會安裝你的證書。
2. 用工具軟體對exe或其他任何文件,進行數字簽名。 可以是免費的UI工具,比如:kSign;也可以類似signtool(微軟的命令行工具);還可以操作系統的向導程序(比如微軟Windows上的簽名文件安裝,導入並對文件數字簽名的向導)。 xNix下,可以用GnuPG (gpg)從證書到簽名,一次搞定。
3. 如果做程序開發,可以利用signtool這樣的命令行工具,寫批處理,然後加入自己項目的make過程中自動加簽。
㈩ 雙軟認證和軟體企業認證有什麼不同
1、包含范圍不同
雙軟認證包括軟體產品評估和軟體企業認證,軟體企業認證是雙軟認證中的最後一步。
2、要求不同
雙軟認證:只要貴公司擁有一個能正常運行的軟體產品,就可以申請「雙軟認證」。
軟體企業認證:企業做雙軟認證是申請軟體企業認定的必要條件,即企業具備雙軟資質之後才能被認定為軟體企業。
3、優惠政策不同
雙軟認證讓企業享受國家提供給軟體行業的稅收優惠政策。軟體產品經登記生效後,自2000年6月24日起至2010年底前,對增值稅一般納稅人銷售其自行開發生產的軟體產品,按17%的法定稅率徵收增值稅後,對其增值稅實際稅負超過3%的部分實行即征即退政策。
在我國境內設立的軟體企業可享受企業所得稅優惠政策。新創辦軟體企業經認定後,自獲利年度起,享受企業所得稅"兩免三減半"的優惠政策,即自獲利年度起,第一年和第二年免徵企業所得稅,第三年至第五年減半徵收企業所得稅。