先交代一下應用場景:我們的軟件需要做一個簡單的有效期驗證保護。初始的想法是
在本地將安裝時間、啟動時間、當前時間做比較,為了防止記錄被修改,記錄在注冊表的特殊的地方並加密。
我使用了.net自帶的rsa加密方法;這樣一來,帶來了一些麻煩,首先我必須存儲公鑰,私鑰用來加密和解密(解決這個問題時,我采用了相當蠢的辦法,我把他們跟時間記錄在一起);第二我還得處理因為公私鑰可能被改變而引起的異常;當然還有360攔截寫入注冊表的異常。總之,麻煩一堆。
所幸,后端的同學提供了一個服務,查詢當前的Unix時間戳。於是有了這個問題。
1 // 2 // Unix時間戳(timestamp)轉換成當地時間的方法 3 // timestamp轉成double后,擴大10000000倍,轉成long,得到ltime 4 // ltime是從格林威治時間的計時起點(1970-01-01 00:00:00)到現在的時間間隔,轉成TimeSpan,得到ts 5 // 計算格林威治的計時起點轉成當地時間的DateTime,得到glwzStart 6 // 用glwzStart加上時間間隔ts,得到當前的當地時間 7 // 8 double dtime = double.TryParse(time, out dtime) ? dtime : 0; 9 long ltime = (long)(dtime * 10000000); 10 TimeSpan ts = new TimeSpan(ltime); 11 DateTime glwzStart = TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Parse("1970-1-1 00:00:00")); 12 DateTime cur = glwzStart.Add(ts); 13 if (cur >= DateTime.Parse(ExpirationDate)) 14 return 1; 15 else 16 return 0;
