亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

應(yīng)用代碼開發(fā)方案

 1 場(chǎng)景需求

ISV大致確認(rèn)自己的接入方案和加密方案后,進(jìn)入開發(fā)階段。需要首先下載最新的TOP SDK。以下是代碼開發(fā)介紹,分成3個(gè)部分:首先介紹SDK中的api, 第二部分是代碼開發(fā)的規(guī)范,最后列舉了再各個(gè)場(chǎng)景下的一些代碼Demo。

 請(qǐng)注意,為了性能和穩(wěn)定性,代碼規(guī)范請(qǐng)務(wù)必要注意遵守!

 

方案介紹

2.1  API介紹

 

作用

參數(shù)

SecurityClient  (constructor)

初始化

 

securityClient.encrypt

自動(dòng)用最新版本密鑰將數(shù)據(jù)加密

可批量傳入數(shù)據(jù),批量返回

securityClient.encryptPrevious

自動(dòng)用上一版本密鑰將數(shù)據(jù)加密(在密鑰變更遷移中可能用到)

可批量傳入數(shù)據(jù),批量返回

securityClient.decrypt

自動(dòng)判斷密文版本,用對(duì)應(yīng)版本密鑰解密數(shù)據(jù)

可批量傳入數(shù)據(jù),批量返回

securityClient.isEncrypt

 

 

securityClient.search

生成給定字符串的模糊查詢

 

初始化:

 SecurityClient SecurityClient = new SecurityClient(new DefaultTaobaoClient(serverUrl, appkey, appSecret), randomNumber)

注1:  defaultTaobaoClient 使用的serverUrl必須是https協(xié)議

 

加密:

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

(此例為手機(jī)號(hào)碼,其余例子見下面分場(chǎng)景詳述)

 

 2.2加密調(diào)用規(guī)范:

1)全部用主賬號(hào)的sessionkey,子賬號(hào)可能沒有權(quán)限

2)調(diào)用之前前置判斷sessionkey

3)授權(quán)返回sessionkey帶了過(guò)期時(shí)間

4)判斷sessionkey的過(guò)期時(shí)間+90天是否已經(jīng)超過(guò),如果過(guò)期超過(guò)90天,不需要調(diào)用加、解密(在重新授權(quán)之前永遠(yuǎn)不可能成功,浪費(fèi)資源),假設(shè)客戶端存在誤判,實(shí)際調(diào)用加、解密可能拋異常。可以采用以下方案:

try {

        // 加、解密操作

} catch (SecretException e) {

        if(ErrorUtil.isInvalidSession(e)) {

        // 標(biāo)記該sessionkey無(wú)效,重新授權(quán)之前不要再調(diào)用

        }

}

 

2.3代碼場(chǎng)景示例:

1)初始化:

SecurityClient securityClient

= new SecurityClient (new DefaultTaobaoClient(serverUrl, appkey, appSecret), Random Number);

defaultTaobaoClient serverUrl必須是https協(xié)議,目前是https://eco.taobao.com/router/rest (沙箱環(huán)境  :https://gw.api.tbsandbox.com/router/rest)

 

2)加解密:

receiver_mobile 加密字段類型(type)是phone。其他加密字段類型(type)是根據(jù)字段查詢方式:普通加密方式的字段類型(type)為simple模糊查詢的字段類型(type)為 search.

 加、解密入?yún)⒈仨殠蟬essionkey

LB1OXJaPXXXXXbvXFXXXXXXXXXX.png

輸出結(jié)果:

 手機(jī)號(hào)碼明文:13834566786 ->密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$

 手機(jī)號(hào)碼密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$ ->明文:13834566786

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

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

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

 

3) 批量加、解密

LB1o4ALOVXXXXbKaFXXXXXXXXXX.png

 

LB1NX8hPXXXXXcjXpXXXXXXXXXX.png

輸出結(jié)果

手機(jī)號(hào)碼明文:15923847823 ->密文:$159$AtyBFui4xvl92WV7GKwfBw==$103$

手機(jī)號(hào)碼明文:13834566786 ->密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$

手機(jī)號(hào)碼密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$ ->明文:13834566786

手機(jī)號(hào)碼密文:$159$AtyBFui4xvl92WV7GKwfBw==$103$ ->明文:15923847823

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

nick明文:taobaoTEST2 ->密文:~nID/f9qCBqgm7MXZSXBpfA==~103~

nick明文:taobaoTEST1 ->密文:~kgRCprD8gH2KuZ3dPoVuqg==~103~

nick密文:~nID/f9qCBqgm7MXZSXBpfA==~103~ ->明文:taobaoTEST2

nick密文:~kgRCprD8gH2KuZ3dPoVuqg==~103~ ->明文:taobaoTEST1

 

 

4) 普通加密場(chǎng)景:

場(chǎng)景1: 在SQL語(yǔ)句中不出現(xiàn)在where從句中。直接取數(shù)據(jù)解密展示或打?。?/span>

String cipher = ReadFromDataBase(); // SELECT cipher FROM table...

String phone = securityClient.decrypt(cipher, “phone”, sessionKey);

 

場(chǎng)景2: 需要把加密字段作為SQL的搜索條件放入where 從句(key = “value”)中:

                      String cipher = securityClient.encrypt(p, “phone”, sessionKey);

                     SELECT * FROM table WHERE phone = #cipher#

                     在明文切換到密文的過(guò)程中,可能會(huì)出現(xiàn)明文和密文混合存在的短暫狀態(tài)。這是需要做好兼容準(zhǔn)備:

                     SELECT * FROM table WHERE phone in ( #cipher#, #p#)

 

5) 支持模糊查詢的加密場(chǎng)景(非手機(jī)號(hào)碼字段)

 

場(chǎng)景1非手機(jī)號(hào)碼字段模糊查詢示例代碼:

//需要模糊查詢的片段

String partial = "cdefg";


//得到模糊查詢密文
String search = securityClient.search(partial);

// 去數(shù)據(jù)庫(kù)做模糊查詢
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);
  }
}

 

場(chǎng)景2phone 模糊查詢前3位示例代碼:

(會(huì)用到前綴索引)

 //需要模糊查詢的片段

String partial = "138";

 // 去數(shù)據(jù)庫(kù)做模糊查詢
List<DO> objects =  SELECT * FROM table WHERE nick LIKE “$”+partial + “%”

 

場(chǎng)景3phone 模糊查詢后4位示例代碼:

(會(huì)用到前綴索引) 

//需要模糊查詢的片段

String partial = "5383";
//得到模糊查詢密文
String search = securityClient.search(partial);
// 去數(shù)據(jù)庫(kù)做模糊查詢
List<DO> objects =  SELECT * FROM table WHERE nick LIKE partial+“%”

 

 

FAQ

  • 關(guān)于此文檔暫時(shí)還沒有FAQ