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

Java 實作軟體試用期控制:登入次數與到期時間雙重驗證

     編輯:Java 相關知識

核心設計理念

本機制透過兩個維度保護軟體:

  1. 登入次數限制:每次啟動遞增計數器,超過閾值即判定試用結束。
  2. 絕對到期時間:比對系統時間與預設截止日期,過期即失效。

驗證資料採用 MD5 雜湊 儲存於本地檔案,防止使用者竄改。

核心類別:ControlValid

package Admin.Control;

import java.io.*;
import java.security.MessageDigest;
import java.util.*;

public class ControlValid {
    private final String REGISTER_NUMBER = "YOUR_SECRET_KEY"; // 原始驗證字串
    private String md5Number;        // MD5 後的字串
    private String writeContent;     // 待寫入檔案內容
    private int loginTimesLimit = 99; // 登入次數上限
    private static int loginTimesTrue = 0; // 實際登入次數
    private MD5 md5Object = new MD5();
    private Calendar cal = Calendar.getInstance();
    private int orderTime = 0;       // 到期時間 (年+月+日 簡易加總)

    // 建構子初始化
    public ControlValid() { ... }

    // 取得註冊碼的 MD5 雜湊值
    public String returnMd5String() {
        try { return md5Object.MD5(REGISTER_NUMBER); }
        catch (Exception e) { return null; }
    }

    // 核心邏輯:讀取舊檔、判斷有效性、寫入新狀態
    public void writeFile() {
        try {
            // 1. 讀取初始化日期檔 (InitDate.txt) 取得 orderTime
            // 2. 讀取控制檔 (ControlValid.txt) 解析上次登入次數
            // 3. 計算目前日期 (年+月+日)
            int currentDate = cal.get(Calendar.YEAR) 
                            + (cal.get(Calendar.MONTH) + 1) 
                            + cal.get(Calendar.DAY_OF_MONTH);

            // 4. 判斷邏輯:未過期 且 未超次數 -> 寫入正確 MD5 與新次數
            //    否則 -> 寫入亂數字串 (導致下次驗證失敗)
            if (currentDate < orderTime && loginTimesTrue < loginTimesLimit) {
                writeContent = returnMd5String() + "\r" + loginTimesTrue;
            } else {
                writeContent = String.valueOf(new Random().nextInt(10000000)) + "\r" + loginTimesTrue;
            }
            // 5. 寫入檔案...
        } catch (Exception e) { e.printStackTrace(); }
    }

    // 驗證檔案中的 MD5 是否與當前計算一致
    public boolean ContractRegisterString() {
        String fileMd5 = readFile("ControlValid.txt").split("\n")[0];
        return returnMd5String().equals(fileMd5);
    }
    // ... 讀檔、Getter/Setter 等輔助方法
}

關鍵實作細節

  • 日期簡易編碼:將年、月、日直接相加 (如 2005+4+9=2018) 作為比較基準,雖非精確但足夠試用期場景。
  • 檔案格式:MD5雜湊值\r登入次數,換行符採用 \r 相容性較好。
  • 失效機制:一旦判定非法,寫入隨機數,導致後續 ContractRegisterString() 永遠回傳 false。
  • 隱藏檔案:建議將 ControlValid.txt 設為隱藏屬性,試用期結束後可直接刪除檔案徹底失效。

使用方式

public static void main(String[] args) {
    ControlValid cv = new ControlValid();
    cv.writeFile();              // 每次啟動呼叫:更新次數、檢查日期
    boolean valid = cv.ContractRegisterString(); // 驗證是否合法
    if (!valid) {
        System.exit(0); // 或彈出提示視窗
    }
}

安全性提醒

此為客戶端單機防護,屬於「君子協定」層級。專業商業軟體建議結合:

  • 線上授權伺服器驗證
  • 程式碼混淆
  • 關鍵邏輯移至 Server 端
  • 硬體綁定 (MAC/CPU ID)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved