| ##作用 | 參數 |
#SecurityClient (constructor) | #初始化 | |
#securityClient.encrypt | #自動用最新版本金鑰將資料加密 | 可批次傳入數據,批次回傳 |
##securityClient .encryptPrevious | 自動用上一版本金鑰將資料加密(在金鑰變更遷移中可能用到) | 可批量傳入數據,批次返回 |
securityClient.decrypt | 自動判斷密文版本,以對應版本金鑰解密資料 | 可批次傳入數據,批次回傳 |
securityClient.isEncrypt | # | |
#securityClient.search | #生成給定字串的模糊查詢 | |
#初始化:
SecurityClient SecurityClient = new SecurityClient(new DefaultTaobaoClient(serverUrl, appkey, appSecret), randomNumber)
注1: defaultTaobaoClient 使用的serverUrl必須是https協議
加密:
securityClient.encrypt(“13888883333”, type, sessionKey)
##
密文判斷:
SecurityClient.isEncrypt(“13888883333”, type)
##
##
#上一版本金鑰加密:
securityClient.encryptPrevious(“13888883333”, type, sessionKey)
解密:
securityClient.decrypt(“~CKoqAl2hWzh54uBFv9Suug==~1~”, type, sessionKey)
#模糊搜尋子句:
##String searchIndex = securityClient. search(“3333”, type, sessionKey)##SELECT * FROM table_orders WHERE phone LIKE #searchIndex#%
#(此範例為手機號碼,其餘範例請見下方分場景詳述)
###### ####### ###2.2###加密呼叫規格:######### ######1)全部用主帳號的sessionkey,子帳號可能沒有權限#############2)呼叫先前前置判斷sessionkey########## ##3)授權回傳sessionkey帶了過期時間######4)判斷sessionkey的過期時間90天是否已經超過,如果過期超過90天,不需要呼叫加上、解密(在重新授權之前永遠不可能成功,浪費資源),假設客戶端有誤判,實際呼叫加、解密可能拋異常。可使用下列方案:
try {
# // 加、解密運算
} catch (SecretException e) {
if(ErrorUtil.isInvalidSession(e)) {
// 標記該session
# // 標記該session
# 不要再呼叫
}}
#2.3程式碼場景範例:
1)初始化:
SecurityClient securityClient#= new SecurityClient (new DefaultTaobaoClient(serverUrl, appkey, appSecret), Random Number);
defaultTaobaoClient serverUrl必須是https協定,目前是https: //eco.taobao.com/router/rest (沙箱環境 :https://gw.api.tbsandbox.com/router/rest
)#
2)加上解密:
receiver_mobile 加密欄位類型(type)是phone。其他加密欄位類型(type)是根據欄位查詢方式:普通加密方式的欄位類型(type)為simple模糊查詢的欄位類型(type)為search. 加、解密入參必須帶上sessionkey
##########輸出結果:######### 手機號碼明文:13834566786 ->密文:$138$SuR h6AtlSj8Z59W2W9EQ==$103$
手機==密文:$138$SuRh6AtlS ->明文:13834566786
=========================TOP========== =================
nick明文:taobaoTEST ->密文:~CKoqAl2hWzh54uBFv9Suug==~103~
# nick密文:~CKoqAl2hWzh54uBFv9Suug==~103~ ->明文:taobaoTEST
##3)
批次加、解密
##輸出結果######:################手機號碼明文:15923847823 ->密文:$159$AtyBFui4xvl92WV7GKwfBw ==$103$############手機號碼明文:13834566786 ->密文:$138$SuR h6AtlSj8Z59W2W9EQ==$103$#############1手機號碼文:$138$SuR h6AtlSj8Z59W2W9EQ==$103$ ->明文:13834566786#############手機號碼密文:$159$AtyBFui4xvl92WV==G####手機號碼密文:$159$AtyBFui4xvl92WV==G####w38380382020202029703802020202970202020297020000072172197000000$$170202021202012021203$> ######## ==========================TOP=============== =========############nick明文:taobaoTEST2 ->密文:~nID/f9qCBqgm7MXZSXBpfA==~103~########### ##nick明文:taobaoTEST1 ->密文:~kgRCprD8gH2KuZ3dPoVuqg==~103~############nick密文:~nID/f9qCBq7MXZSXBpfA==~103 -obao; ############nick密文:~kgRCprD8gH2KuZ3dPoVuqg==~103~ ->明文:taobaoTEST1############ ######
4) 普通加密情境:
場景1: 在SQL語句中不出現在where子句中。直接取資料解密展示或列印:
String cipher = ReadFromDataBase(); // SELECT cipher FROM table...
String phone = securityClient.decrypt(cipher, “phone”, sessionKey);
##
場景2: 要加密欄位作為SQL的搜尋條件放入where 子句(key = “value”):
String cipher = securityClient. “encry”
SELECT * FROM table WHERE phone = #ciphero#明文切換到密文的過程中,可能會出現明文和密文混合存在的短暫狀態。以下是需要做好相容準備:
ELECT * FROM table WHERE 問題
#5)
支援模糊查詢的加密場景(#非手機號碼欄位)
: 」場景1
:非手機號碼欄位模糊查詢範例程式碼:
//需要模糊查詢的片段String partial = "cdefg";#
//得到模糊查詢密文
String search = securityClient.search(partial);
## // 去資料庫做模糊查詢
List<DO> objects = SELECT * FROM table WHERE nick LIKE 「%」 #search# "%」
##'
List<DO> result = new List<DO>();
for(DO object : objects) {
if (SecurityClient.decrypt(object.nick).contains(partial)){
result.add(object);
}
####################################################################################################################################################################################################' #### }############ ################場景2######:###phone 模糊查詢前3位範例程式碼:############(會用到前綴索引)############# //需要模糊查詢的片段######### ###String partial = "138";############ // 去資料庫做模糊查詢######### List<DO> objects = SELECT * FROMgt; objects = SELECT * FROM tablenickWHERE LIKE “$” partial “%”############ ###############場景3######:###phone 模糊查詢後4位元範例程式碼:############(會用到前綴索引) ############//需要模糊查詢的片段###### ######String partial = "5383";########## //得到模糊查詢密文######### String search = securityClient.search(partial);## ####### // 去數據庫做模糊查詢######### List<DO> objects = SELECT * FROM table WHERE nick LIKE partial “%”######### # ##
FAQ