post提交加密
有的時候 我們需要和flash交互 這就涉及到數(shù)據(jù)的交互 flash給我們提交數(shù)據(jù) 我們往處理后添加數(shù)據(jù)庫.
這個時候 就會有安全問題 flash提交的數(shù)據(jù) 可能被截獲。然后把偽裝提交數(shù)據(jù)。 比如說flash游戲 玩完游戲加積分 然后把積分加到數(shù)據(jù)庫里 。每次玩完flash都提交post提交一個 userid:2,gamenumber:30 如果被別人截獲后 (推薦個截取工具 httpwatch) 修改下 userid:2,gamenumber:300000 然后就一下子加了幾萬份 (曾經(jīng)QQ空間里的游戲 我就這樣刷分過 全部刷到9999999) 這就有很大的安全隱患 尤其是我們的積分可以兌換實物的時候
目前網(wǎng)上的做法是使用 https 協(xié)議 還有另一種常用的做法是 調(diào)用webservice
我這里使用的是另一種
首先 和flash開發(fā)人員 約定一個MD5公鑰 (比如 wlf 然后把wlf用MD5加密(也可以用別的方式加密) 變?yōu)?span style="text-align: left">fc6796eaaf289c444c76c8fc818bf73c )
然后flash 提交的時候 假設提交 userid:2,gamenumber:30 這是不安全的 現(xiàn)在開始加密 現(xiàn)在他要給我傳的是
userid:2,gamenumber:30,t:2011051011053232,m:EUDHSKBHJSHDUIWHDJKHJ
這里面 t 是時間戳 就是flash提交時的當前時間 m則很關(guān)鍵 m是個密鑰 時間戳(這里是2011051011053232)+userid(這里是2)+gamenumber(這里是30)+公鑰) 拼接成一個字符串 然后再用MD5加密出來的
現(xiàn)在 我們接受到了上述東西 其他人也截獲了上述東西
我們把 時間戳+userid+gamenumber+公鑰 組成個字符串 然后用MD5加密 看看是不是與傳過來的m相等 相當 則說明沒有被篡改活
如果對方把gamenumber改為90 那么m一定是不相同的 則是篡改過的
如果誰有更好的方法 希望告訴下~~謝謝
下面貼個方法~~
/// <summary>
/// 判斷傳過來的參數(shù)連一起在MD5加密后是與傳過來的密鑰相等
/// </summary>
/// <param name="miyao">傳過來的密鑰</param>
/// <param name="parm">傳過來的參數(shù)</param>
/// <returns>返回true則說明沒有篡改 false則說明篡改過</returns>
public static bool IsTrue(string miyao, params string[] parm)
{
StringBuilder sb = new StringBuilder();
foreach (string s in parm)
{
sb.Append(s);
}
sb.Append(GameKey);//公鑰
string m= EncryptMD5(sb.ToString());//拼接后MD5加密的密鑰
if (m.ToLower() == miyao.ToLower())
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// MD5加密
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
public static string EncryptMD5(string txt)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txt, "MD5");
}
浙公網(wǎng)安備 33010602011771號