應用程式碼開發方案


 1 場景需求

#ISV大致確認自己的存取方案和加密方案後,進入開發階段。需要先下載最新的TOP SDK。以下是程式碼開發介紹,分成3個部分:首先介紹SDK中的api, 第二部分是程式碼開發的規範,最後列舉了再各個場景下的一些程式碼Demo。

 請注意,為了效能和穩定性,程式碼規格請務必注意遵守!

 

方案介紹

2.1  API介紹

##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.

LB1OXJaPXXXXXbvXFXXXXXXXXXX.png

 加、解密入參必須帶上sessionkey

##########輸出結果:#########

 手機號碼明文:13834566786 ->密文:$138$SuR h6AtlSj8Z59W2W9EQ==$103$

 手機==密文:$138$SuRh6AtlS ->明文:13834566786

 =========================TOP========== =================

 nick明文:taobaoTEST ->密文:~CKoqAl2hWzh54uBFv9Suug==~103~

# nick密文:~CKoqAl2hWzh54uBFv9Suug==~103~ ->明文:taobaoTEST

 

 

LB1o4ALOVXXXXbKaFXXXXXXXXXX.png

 

LB1NX8hPXXXXXcjXpXXXXXXXXXX.png

##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 = #cipher

o#明文切換到密文的過程中,可能會出現明文和密文混合存在的短暫狀態。以下是需要做好相容準備:

                     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

  • 關於此文件暫時還沒有FAQ

 

##作用

參數

#SecurityClient  (constructor)

#初始化

 

#securityClient.encrypt

#自動用最新版本金鑰將資料加密

可批次傳入數據,批次回傳