機器碼 序列號 認證碼 註冊碼的生成演算法(五)

2021-09-24 04:47:30 字數 2081 閱讀 7845

非對稱加密自然是要更安全的,因為軟體裡沒有私鑰。但該方法最大的缺點就是金鑰太長,註冊碼太長,無法手抄。鑑於我們假設破解者是無法對軟體反編譯的,使用對稱加密也未嘗不可。

流程跟上一節提到的基本一致。加密方法可以使用des,金鑰最短是64位,也就是16個字元。明文資訊最長是7個位元組,我們用4個位元組存放機器碼(相當於乙個int),然後剩下的三個位元組存放過期資訊。

下面是實現整個過程的乙個示例**(c#):

/// /// 機器碼認證

///

public static class machineauth

else

filestream fs = file.openwrite(file);

fs.write(data, 0, 4);

fs.close();

(new fileinfo(file)).attributes = fileattributes.hidden;

return data;}}

/// /// 獲得機器碼

///

/// 機器碼

public static string getmachinecode()

/// /// 機器碼和認證碼是否配對正確

///

/// 機器碼

/// 認證碼

/// 配對成功

public static bool iscodevalid(string machinecode, string authcode)

/// /// 機器碼和認證碼是否配對正確

///

/// 機器碼

/// 認證碼

/// 當前時間

/// 配對成功

public static bool iscodevalid(string machinecode, string authcode, datetime now)

}byte auth_code = decrypt(stringtobyte(authcode));

for (int i = 0; i < 7; i++)

for (int i = 0; i < 4; i++)

}datetime time = new datetime(2000 + auth_code[4], auth_code[5], auth_code[6]);

if (time < now)

return true;

}catch

}#if debug

/// /// 獲得認證碼

///

/// 機器碼字串

/// 有效天數,-1為長期

/// 認證碼

public static string getauthcode(string machinecode, int days = -1)

else

for (int i = 0; i < 7; i++)

return bytetostring(encrypt(data));

}#endif

#region 輔助函式

private static readonly byte key = new byte ;

private static readonly byte iv = new byte ;

private static readonly byte mask = new byte ;

private static byte encrypt(byte indata)

result = ms.toarray();

}return result;

}private static byte decrypt(byte indata)

result = ms.toarray();

}return result;

}private static string bytetostring(byte bytes)

return sb.tostring();

}private static byte stringtobyte(string str)

return data;

}#endregion

}

機器碼 序列號 認證碼 註冊碼的生成演算法(一)

雖然標題列出了很多種 碼 但其實有些是乙個意思,只是叫法不一樣而已。我所介紹的演算法也不是說絕對嚴謹 不能破解的,它們只是適用於某些場合而已。舉個例子,我現在想設計乙個長度是24個字元的註冊碼,但如果你用比較安全的rsa演算法來做的話,可能你要用到1024個位元組,轉成base64也有170個字元。...

PLSQL Developer 註冊碼 序列號

1.先註冊 version 7.1.1.1339 01.45678 5user license pl sql developer version 7.1.4 released 正版註冊正版註冊 product code at46 mutg qjwf l9h6 7zfm xy serial numbe...

C 生成註冊碼

string t datetime.now.ticks.tostring t deskey.desencrypt t,deskey.deskeystr string strid new string t.length for int i 0 i t.length i 把字元賦給陣列 string s...