平台简介 新手指南 应用权限说明 移动应用-互动到店业务 TVOS游戏业务 YUNOS开放业务 阿里百川业务 第三方IT工具 商家后台系统应用 服务商后台系统应用 千牛开放业务 阿里.去哪儿业务 WMS(仓储管理系统) 业务接入指南 天猫品牌会员 淘宝客 云盾魔方 API列表 平台技术-API调用协议 平台技术-用户授权介绍 平台技术-应用环境介绍 平台技术-Java SDK使用说明 平台技术-.NET SDK使用说明 平台技术-API调用示例 平台技术-消息服务使用介绍 平台技术-API批量调用简介 平台技术-SPI服务接入文档 平台功能-沙箱环境说明 平台功能-支付宝API开发帮助 平台功能-API文档其他查看方式 平台功能-多店铺管理 平台功能-应用安全保障设置 平台功能-聚石塔塔外测试方法 平台功能-子账号授权流程介绍(新) 平台功能-子账号授权改造升级介绍 平台功能-子账号授权改造升级影响范围 平台功能-Q&A 平台功能-API报表功能介绍 平台功能-API监控预警解释 常用工具-问题反馈系统 API异常排查方法 API相关工具使用说明 消息服务问题自助排查 2015大促保障 商品发布 类目属性度量衡 商品信息修改 库存同步 预扣库存 订单同步 天猫预售业务 拆单/子订单发货 物流发货 退款退货场景 关联营销场景介绍 客服绩效考核 电子凭证签名加密和解密 电子凭证发码sign验证 淘宝客API使用说明 直通车API介绍 DSP-API使用说明 云栈电子面单 多媒体平台API优化建议 数据加密简介 数据加密接入指南 账号体系接入方案 应用代码开发方案 密文字段检索方案 历史数据迁移方案 API字段加密文档 常见问题 数据加密培训视频 名词解释 名词解释-交易类型 名词解释-交易状态 授权签名与SDK API相关问题 沙箱问题解答 淘客和xtao ONS客户端 服务商帮助中心-服务商入驻 审核 服务市场 违规 新业务 质检服务 电商托管业务 自助服务 API技术服务费发票 我要投诉 流量申请 服务商身份变更

平台简介

媒体广告

其他

淘宝开放平台开发文档

浏览26279
更新时间2022-04-11

 1 场景需求

ISV大致确认自己的接入方案和加密方案后,进入开发阶段。需要首先下载最新的TOP SDK。以下是代码开发介绍,分成3个部分:首先介绍SDK中的api, 第二部分是代码开发的规范,最后列举了再各个场景下的一些代码Demo。

 请注意,为了性能和稳定性,代码规范请务必要注意遵守!

 

方案介绍

2.1  API介绍

 

作用

参数

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)) {

        // 标记该sessionkey无效,重新授权之前不要再调用

        }

}

 

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

LB1OXJaPXXXXXbvXFXXXXXXXXXX.png

输出结果:

 手机号码明文:13834566786 ->密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$

 手机号码密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$ ->明文:13834566786

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

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

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

 

3) 批量加、解密

LB1o4ALOVXXXXbKaFXXXXXXXXXX.png

 

LB1NX8hPXXXXXcjXpXXXXXXXXXX.png

输出结果

手机号码明文:15923847823 ->密文:$159$AtyBFui4xvl92WV7GKwfBw==$103$

手机号码明文:13834566786 ->密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$

手机号码密文:$138$SuR++h6AtlSj8Z59W2W9EQ==$103$ ->明文:13834566786

手机号码密文:$159$AtyBFui4xvl92WV7GKwfBw==$103$ ->明文:15923847823

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

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

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

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

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.encrypt(p, “phone”, sessionKey);

                     SELECT * FROM table WHERE phone = #cipher#

                     在明文切换到密文的过程中,可能会出现明文和密文混合存在的短暂状态。这是需要做好兼容准备:

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

 

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);
  }
}

 

场景2phone 模糊查询前3位示例代码:

(会用到前缀索引)

 //需要模糊查询的片段

String partial = "138";

 // 去数据库做模糊查询
List<DO> objects =  SELECT * FROM table WHERE nick LIKE “$”+partial + “%”

 

场景3phone 模糊查询后4位示例代码:

(会用到前缀索引) 

//需要模糊查询的片段

String partial = "5383";
//得到模糊查询密文
String search = securityClient.search(partial);
// 去数据库做模糊查询
List<DO> objects =  SELECT * FROM table WHERE nick LIKE partial+“%”

 

 

FAQ

  • 关于此文档暂时还没有FAQ

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

64.9万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.2万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.6万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.3万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.1万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载