通常使用的方式就是把參數拼接,當前項目AppKey,雙方約定的「密鑰」,加入到Dictionary字典集中,按ABCD順序進行排序,最後在MD5+加密.客戶端將加密字符串和請求參數一塊兒發送給服務器。服務器按照php
上述規則拼接加密後,與傳入過來的加密字符串比較是否相等java
上面的方式進行加密,就沒法解決防複用的問題,這時須要在客戶端和服務端分別生成UTC的時間戳,這個UTC是防止你的客戶端與服務端不在同一個時區,呵呵,而後把時間戳timestamp拼在密文裏就能夠了,至於防複用的有效性服務器
各類語言獲取時間戳的方法:加密
Swift | NSDate().timeIntervalSince1970 |
Go | import ( "time" ) int32(time.Now().Unix()) |
Java | // pure java (int) (System.currentTimeMillis() / 1000) // joda (int) (DateTime.now().getMillis() / 1000) |
JavaScript | Math.round(new Date() / 1000) |
Objective-C | [[NSDate date] timeIntervalSince1970] |
MySQL | SELECT unix_timestamp(now()) |
SQLite | SELECT strftime('%s', 'now') |
Erlang | calendar:datetime_to_gregorian_seconds(calendar:universal_time())-719528*24*3600. |
PHP | // pure php time() // Carbon\Carbon Carbon::now()->timestamp |
Python | import time time.time() |
Ruby | Time.now.to_i |
Shell | date +%s |
Groovy | (new Date().time / 1000).intValue() |
Lua | os.time() |
.NET/C# | (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 |