非對稱加密自然是要更安全的,因為軟體裡沒有私鑰。但該方法最大的缺點就是金鑰太長,註冊碼太長,無法手抄。鑑於我們假設破解者是無法對軟體反編譯的,使用對稱加密也未嘗不可。
流程跟上一節提到的基本一致。加密方法可以使用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...