首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 應用程式授權實戰:基於 RSA 非對稱加密的完整流程

     編輯:關於.NET

針對 .NET 應用程式的授權保護,採用 RSA 非對稱加密演算法是業界經典且有效的方案。本文不贅述加密原理,直接梳理從金鑰生成到驗證邏輯的完整工程化步驟,供開發者快速落地。

第一步:生成金鑰對

使用 RSACryptoServiceProvider 生成一對金鑰:公鑰內嵌於發布的客戶端程式中,用於驗證授權檔;私鑰嚴格保管於伺服器端或授權生成工具中,用於簽發授權碼。

using (var rsa = new RSACryptoServiceProvider())
{
    string pubKey = rsa.ToXmlString(false);  // 公鑰
    string priKey = rsa.ToXmlString(true);   // 私鑰
    // 安全存儲...
}

第二步:獲取機器唯一識別碼 (硬體指紋)

綁定硬體資訊以防止授權檔被盜用。常見選擇為 CPU ID,透過 WMI (System.Management) 獲取:

public string GetCpuId()
{
    using (var mc = new ManagementClass("Win32_Processor"))
    using (var moc = mc.GetInstances())
    {
        foreach (ManagementObject mo in moc)
            return mo.Properties["ProcessorId"].Value.ToString();
    }
    return null;
}

第三步:開發授權碼生成工具 (簽發端)

使用私鑰對「硬體指紋」進行簽名,生成 Base64 編碼的授權碼 (License),可存為 .lic 檔案、寫入註冊表或資料庫。

using (var rsa = new RSACryptoServiceProvider())
{
    rsa.FromXmlString(privateKey);
    var formatter = new RSAPKCS1SignatureFormatter(rsa) { HashAlgorithm = "SHA1" };
    byte[] data = Encoding.ASCII.GetBytes(cpuId);
    byte[] hash = new SHA1Managed().ComputeHash(data);
    byte[] signature = formatter.CreateSignature(hash);
    string licenseCode = Convert.ToBase64String(signature);
    // 儲存 licenseCode...
}

第四步:客戶端驗證邏輯 (驗證端)

在應用程式啟動、核心功能調用等關鍵節點,使用內嵌公鑰驗證授權碼有效性。

using (var rsa = new RSACryptoServiceProvider())
{
    rsa.FromXmlString(publicKey);
    var deformatter = new RSAPKCS1SignatureDeformatter(rsa) { HashAlgorithm = "SHA1" };
    byte[] sig = Convert.FromBase64String(licenseCode);
    byte[] hash = new SHA1Managed().ComputeHash(Encoding.ASCII.GetBytes(cpuId));
    bool isValid = deformatter.VerifySignature(hash, sig);
    // 根據 isValid 決定授權狀態...
}

安全提示:私鑰絕不可洩露;建議對驗證邏輯進行代碼混淆;關鍵路徑可增加反調試檢測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved