網路上大多數共享軟體的註冊碼(序列號)設計較為簡單,極易被破解者編寫註冊機大量生成有效碼。本文介紹一種基於 RSA 非對稱加密算法的註冊碼生成與驗證方案,其核心優勢在於:即便破解者獲得軟體內嵌的公鑰,若無私鑰也極難推導出有效註冊碼,從而有效防範註冊機的製作。
RSA 算法使用一對密鑰:公鑰與私鑰。兩者互為反向運算,且從一方推導另一方的難度建立在大整數分解的數學困難性之上。利用此特性,我們可以將「註冊碼生成」與「註冊碼驗證」分離:
以下示範 64 位 RSA 參數生成與註冊碼計算(僅供教學,實際請用 ≥ 1024 位)。
大素數 P = A57F2B33
大素數 Q = E7C441B3
模數 N = 95D49FD119EF27A9
私鑰 D = 76D2A6E2AC86CC99
公鑰 E = 65537
#ifndef WIN32
#define WIN32
#endif
#include "lip.h" // Freelip 標頭
// 專案中需加入 lip.c
char UserName[] = "4E6574677579"; // 用戶名十六進制(如 "Netguy")
char SerialNumber[256];
verylong N = 0, D = 0, M = 0, C = 0; // Freelip 大數類型
zhsread(UserName, &M); // 初始化明文 M
zhsread("95D49FD119EF27A9", &N); // 初始化模數 N
zhsread("76D2A6E2AC86CC99", &D); // 初始化私鑰 D
zexpmod(M, D, N, &C); // C = (M^D) mod N
zswrite(SerialNumber, C); // 輸出十進制字串作為註冊碼
RSA 非對稱加密為共享軟體註冊提供了堅實的密碼學基礎:私鑰簽發、公鑰驗證,有效杜絕了傳統對稱算法易被逆向出註冊機的弱點。但需注意密鑰長度、隨機數品質、公鑰選擇等工程細節,並結合反調試、代碼完整性保護、硬體綁定等多層防禦,才能構建相對完善的軟體授權體系。