# CISSSDK的接口【应用APP使用】
备注:大部分的接口需使用线程调用。
# 连接卡
- 定义:
| 连接卡接口 | |
|---|---|
| 接口名称 | connectSimKey |
| 接口描述 | 建立和卡的连接 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| connectConfig | ConnectConfig | 连接配置 | |
| progressListener | CISSProgressListener | 进度提示 | 异步回调提示和结果,可以为空 |
ConnectConfig定义:
| 返回值 | 方法和描述 |
|---|---|
| ConnectConfig.Builder | newBuilder() |
ConnectConfig.Builder定义
| 返回值 | 方法和描述 |
|---|---|
| ConnectConfig.Builder | useOMA() 使用OMA通道, 不需要网络 |
| ConnectConfig.Builder | useBleByMac(String mac) 使用蓝牙卡的mac地址来进行蓝牙连接, 不需要网络 |
| ConnectConfig.Builder | useBleByPhone(String phone) 使用手机号来进行蓝牙连接, 需要网络 |
| ConnectConfig.Builder | useBleByICCID() 使用系统api读取ICCID来进行蓝牙连接, 需要网络。在Android 10及以上的手机上无法获取到ICCID |
| ConnectConfig.Builder | useBleByScan() 使用蓝牙扫描来进行蓝牙连接, 不需要网络 |
| ConnectConfig.Builder | useBleByScanIfICCIDAbsent() 如果系统api读取不到ICCID则扫描蓝牙来进行蓝牙连接, 需要网络 |
| ConnectConfig.Builder | notifyConnectResult() 通知连接结果, 用于排查错误。需要网络 |
| ConnectConfig | build() |
注意:如果要用蓝牙连接方式,那么使用其中一种就行了,如果传入多个,则最后一个设置生效,之前的会被覆盖。
- 返回类型:boolean
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//code:错误代码 msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//使用手机号码连接, 推荐方式
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
//使用手机mac地址连接, 离线使用场景下推荐使用此方式
ConnectConfig connectConfigMac = ConnectConfig.newBuilder()
.useOMA()
.useBleByMac("00:B7:1D:0A:A5:01")
.build();
//连接
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- 返回:true 成功连接到卡,false 失败
# 读取证书
- 定义:
| 读取证书接口 | |
|---|---|
| 接口名称 | readCer |
| 接口描述 | 读取证书, 如果没有返回空 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| cerType | boolean | 证书类型 | true:签名证书 false:加密证书 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回类型:byte[] 返回 byte数组,成功获取cer,返回null ,获取失败。
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
//连接
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//读取证书
boolean isSign = true;
byte[] cer = cisssdk.readCer(getContext(), isSign, progressListener);
Log.d(TAG, "证书长度:" + cer.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 签名
- 定义:
| 签名接口 | |
|---|---|
| 接口名称 | privSign |
| 接口描述 | 用签名密钥对的私钥对 Hash串/原文 进行签名. sm2的签名值以(r||s)的格式返回,64字节 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| data | byte[] | 原文 | 不能为空 |
| dataType | int | 数据类型 | 0:原文1(在0016的预处理的基础上,对原文多做了一次sm3). 1: hash值 2: 原文2( 按照0016的预处理操作 ) 区别在于是否需要经过hash 推荐使用CissInterConst.SignDataType里面的常量定义 |
| pinFlag | int | 是否输入pin (目前没有作用,强制弹窗) | 0: 不用输入 1:需要输入 推荐使用CissInterConst.IsNeedPin里面的常量定义 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回类型:byte[]
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(),
connectConfig,
progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//签名
String plain = "hello Simkey!";
byte[] sign = cisssdk.privSign(getContext(),
plain.getBytes(),
SignDataType.PLAIN,
IsNeedPin.NEED_PIN,
progressListener);
Log.d(TAG, "签名结果长度:" + sign.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
备注:"hello Simkey!"为签名数据,系统正式上线后需要改成有意义的文字,签名验签成功后,签名数据具有法律效应。
- 返回十六进制显示:
DD5F976A79F326D2727660D246440BA35B853FAC16B96179F8B275261B00E58C0FFF4D22C5F18FDE58F51C372D22B45A9213C3D97B97D77E3B91858E2BCFC01E
1
# P1签名
- 定义:
| 签名接口 | |
|---|---|
| 接口名称 | privSignP1 |
| 接口描述 | 用签名密钥对的私钥对 Hash串/原文 进行签名,PKCS#1格式返回 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| data | byte[] | 原文 | 不能为空 |
| dataType | int | 数据类型 | 0:原文1(在0016的预处理的基础上,对原文多做了一次sm3). 1: hash值 2: 原文2( 按照0016的预处理操作 ) 区别在于是否需要经过hash 推荐使用CissInterConst.SignDataType里面的常量定义 |
| pinFlag | int | 是否输入pin (目前没有作用,强制弹窗) | 0: 不用输入 1:需要输入 推荐使用CissInterConst.IsNeedPin里面的常量定义 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回类型:byte[]
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(),
connectConfig,
progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//签名
String plain = "hello Simkey!";
byte[] sign = cisssdk.privSignP1(getContext(),
plain.getBytes(),
SignDataType.PLAIN,
IsNeedPin.NEED_PIN,
progressListener);
Log.d(TAG, "签名结果长度:" + sign.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
备注:"hello Simkey!"为签名数据,系统正式上线后需要改成有意义的文字,签名验签成功后,签名数据具有法律效应。
- 返回十六进制显示:
304402202E12D60DFD16CB883811525D0E31D4C37898422CE6D25B7C9AB5471374984C8F022078AB926BD4E2094DAF2ACD5FA61A672BE11B3DA22B016AD0057634C18236A617
1
# P7签名
- 定义:
| 签名接口 | |
|---|---|
| 接口名称 | privSignP7 |
| 接口描述 | 用签名密钥对的私钥对 原文 进行签名,PKCS#7格式返回, 目前仅支持国密算法 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| data | byte[] | 原文 | 不能为空 |
| dataType | int | 数据类型 | 0:原文1(在0016的预处理的基础上,对原文多做了一次sm3). 2: 原文2( 按照0016的预处理操作 ) 推荐使用CissInterConst.SignDataType里面的常量定义 |
| pinFlag | int | 是否输入pin (目前没有作用,强制弹窗) | 0: 不用输入 1:需要输入 推荐使用CissInterConst.IsNeedPin里面的常量定义 |
| attach | boolean | 是否为attach模式 | true: attach模式, 返回结果带原文 false:detach模式, 返回结果不带原文 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回类型:byte[]
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(),
connectConfig,
progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//签名
String plain = "hello Simkey!";
byte[] sign = cisssdk.privSignP7(getContext(),
plain.getBytes(),
SignDataType.PLAIN,
IsNeedPin.NEED_PIN,
true, /*attach模式*/
progressListener);
Log.d(TAG, "签名结果长度:" + sign.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
备注:"hello Simkey!"为签名数据,系统正式上线后需要改成有意义的文字,签名验签成功后,签名数据具有法律效应。
- 返回十六进制显示:
30820563060A2A811CCF550601040202A08205533082054F020101310E300C06082A811CCF550183110500301D060A2A811CCF550601040201A00F040D68656C6C6F2053696D6B657921A08204503082044C308203F3A003020102020A2ACC4C3A8D42DBABF70E300A06082A811CCF5501837530818A310B300906035504061302434E31343032060355040A0C2B53494D4B4559205355424F5244494E41544520434120436572746966696361746520417574686F726974793121301F06035504030C1853494D4B45594341205355424F5244494E41544520534D323110300E06035504080C074A69616E6753753110300E06035504070C074E616E4A696E67301E170D3231303830323031323935375A170D3232303830323031323935375A304A310F300D06035504030C06E982B9E5AE8131143012060355040A0C0B4349535320E5BA94E794A831143012060355040B0C0B3138313638303536363636310B300906035504061302434E3059301306072A8648CE3D020106082A811CCF5501822D0342000483628572D7061F9F77792E2DF52462B3662196C8E3DFD37AAAA551B6DE47C870A5E79D23C78C3B9F35357CACA6A75D4A9E6D2B30ABE4C36FEE8464B8EBC2C151A382027E3082027A3081AD0603551D230481A53081A280145321FDEC21B5D1DF6D5941FC09C41369C0473903A17EA47C307A310B300906035504061302434E312B3029060355040A0C2253494D4B45594341524F4F5420436572746966696361746520417574686F72697479311A301806035504030C1153494D4B4559434120524F4F5420534D323110300E06035504080C074A69616E6753753110300E06035504070C074E616E4A696E67820A2ACC40D95A9658239CDD301D0603551D0E041604143A70DD60CC0E749FC3CF4E1B44E78A4B33462E94300E0603551D0F0101FF0404030206C030480603551D200441303F303D06082B060105050702013031302F06082B06010505070201162368747470733A2F2F73696D6B65792E61736961696E666F2D7365632E636F6D2F6370733081B50603551D1F0481AD3081AA3081A7A025A023862168747470733A2F2F73696D6B65792E746563682F73696D6B65792D736D2E63726CA27EA47C307A310B300906035504061302434E312B3029060355040A0C2253494D4B45594341524F4F5420436572746966696361746520417574686F72697479311A301806035504030C1153494D4B4559434120524F4F5420534D323110300E06035504080C074A69616E6753753110300E06035504070C074E616E4A696E67307606082B06010505070101046A3068303406082B06010505073002862868747470733A2F2F73696D6B65792E61736961696E666F2D7365632E636F6D2F726F6F742E637274303006082B06010505073001862468747470733A2F2F73696D6B65792E61736961696E666F2D7365632E636F6D2F6F637370300C0603551D130101FF04023000301106096086480186F8420101040403020780300A06082A811CCF55018375034700304402204ACDB2BBF1832CD1C59D41258567CC9A3FA4F31ADCE11AE172D5750B89DAAAC8022050D83B4E7B28421FB554D4BA12183D4A599BF214D05245749E4A7D57C6E54FF83181C63081C30201013058304A310F300D06035504030C06E982B9E5AE8131143012060355040A0C0B4349535320E5BA94E794A831143012060355040B0C0B3138313638303536363636310B300906035504061302434E020A2ACC4C3A8D42DBABF70E300C06082A811CCF550183110500300D06092A811CCF5501822D01050004473045022100D1DB527C88DCEC48C64EE863EDC90E852D26B1B17A8C2220C6F4E7787DBAB73602200975D053536FC0B09C01EA8098D8431B1CBC4B8A0D262E61D1EC9420BAFFA075
1
# 公钥加密
- 定义:
| 加密接口 | |
|---|---|
| 接口名称 | pubKeyEncrypt |
| 接口描述 | 用密钥对的公钥对数据进行加密 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| cerType | boolean | 是否是签名密钥对加密 | true:使用签名公钥加密; false:使用加密公钥加密 |
| data | byte[] | 要加密的数据 | 无 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回:byte[] 数组
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//公钥加密
String plain = "hello Simkey!";
boolean isSign = true;
byte[] cipher = cisssdk.pubKeyEncrypt(getContext(),
isSign,
plain.getBytes(),
progressListener);
Log.d(TAG, "公钥加密密文长度:" + cipher.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 私钥解密
- 定义:
| 解密接口 | |
|---|---|
| 接口名称 | priKeyDecrypt |
| 接口描述 | 用密钥对的私钥对密文进行解密 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| data | byte[] | 密文 | |
| cerType | boolean | 是否是签名密钥对加密 | true:使用签名私钥解密; false:使用加密私钥解密 |
| pinFlag | String | 是否需要输入pin(目前没有作用,强制弹窗) | 0:不用输入 1:需要输入 |
| progressListener | CISSProgressListener | 当前进度描述 | 异步回调提示和结果,可以为空 |
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//公钥加密
String plain = "hello Simkey!";
boolean isSign = true;
byte[] cipher = cisssdk.pubKeyEncrypt(getContext(),
isSign,
plain.getBytes(),
progressListener);
Log.d(TAG, "公钥加密密文长度:" + cipher.length);
//私钥解密
byte[] deCipher = cisssdk.priKeyDecrypt(getContext(),
cipher,
isSign,
IsNeedPin.NEED_PIN,
progressListener);
Log.d(TAG, "私钥解密结果:" + new String(deCipher));
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 修改pin码
- 定义:
| 修改pin码接口 | |
|---|---|
| 接口名称 | modifyPin |
| 接口描述 | 修改pin码 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
- 返回类型:boolean
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//修改pin
boolean success = cisssdk.modifyPin(getContext(), progressListener);
Log.d(TAG, "修改pin结果:" + success);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- 返回:true 成功连接到卡,false 失败
# 申请重置Pin
- 定义:
| 申请重置pin码接口 | |
|---|---|
| 接口名称 | applyResetUKeyPin |
| 接口描述 | 申请重置pin码 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
- 返回类型:boolean
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//申请重置pin
boolean success = cisssdk.applyResetUKeyPin(getContext(), progressListener);
Log.d(TAG, "申请重置pin:" + success);
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
- 返回:true 申请重置成功,false 申请重置失败
# 重置Pin
- 定义:
| 重置pin码接口 | |
|---|---|
| 接口名称 | resetPin |
| 接口描述 | 重置pin码 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
- 返回类型:boolean
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//重置pin, 需要平台审核通过
boolean success = cisssdk.resetPin(getContext(), progressListener);
Log.d(TAG, "重置pin结果:" + success);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- 返回:true 重置成功,false 重置失败
# 获取手机号
- 定义:
| 获取手机号接口 | |
|---|---|
| 接口名称 | getPhoneNumber |
| 接口描述 | 获取手机号码 Sdk 不保证手机是否和卡一致,手机合法性由应用APP保证, 获取手机号接口仅作为参考。 卡仅作为U盾使用,保证签名合法性 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
- 返回类型:String
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
// 获取手机号
String phoneNumber = cisssdk.getPhoneNumber(getContext(), progressListener);
Log.d(TAG, "手机号码:" + phoneNumber);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- 返回:String类型手机号
# 上传日志
- 定义:
| 上传日志 | |
|---|---|
| 接口名称 | uploadLogFile |
| 接口描述 | 上传日志 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
- 返回类型:boolean
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
// 上传日志
boolean success = cisssdk.uploadLogFile(getContext(), progressListener);
Log.d(TAG, "上传日志结果:" + success);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
- 返回: boolean值,判断日志是否上传成功
# 设置PIN弹窗回调监听
- 定义:
| 回调监听接口 | |
|---|---|
| 接口名称 | setObjectListener |
| 接口描述 | 设置PIN弹出回调监听(创建CISSSDK对象后监听), 监听PIN输入框的显示和隐藏状态 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| objectListener | CISSObjectListener | 监听回调 | 异步回调 |
- 返回类型:void
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//设置pin弹出通知
CISSObjectListener pinListener = new CISSObjectListener() {
@Override
public void onPinListener(int errorCode, String errorMsg) {
//resultcode: 1 即将弹出输入 pin 的弹窗 2 弹窗消失
//resultDesc: 描述
Log.d(TAG, String.format("onPinListener:code:%d,desc:%s", errorCode, errorMsg));
}
};
cisssdk.setObjectListener(pinListener);
//签名
String plain = "hello Simkey!";
byte[] sign = cisssdk.privSign(getContext(),
plain.getBytes(),
SignDataType.PLAIN,
IsNeedPin.NEED_PIN,
progressListener);
Log.d(TAG, "签名结果长度:" + sign.length);
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 获取OTP密码【动态口令】
- 定义:
| 获取动态口令接口 | |
|---|---|
| 接口名称 | getOTP |
| 接口描述 | 获取otp密码, 使用之前需要先 导入OTP Key |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| tc | int | 以秒为单位的口令变化周期 0<tc<=60 | 无 |
| c | byte[] | 参与预算的因子 ,固定四字节,可以为空 | 无 |
| q | String | 认证双方输入的挑战因子,accii码长度大于等于4 可以为空 | 无 |
| otpLength | String | otp的长度, 大于等于6 | 无 |
| progressListener | CISSProgressListener | 进度,提示 | 异步回调提示和结果,可以为空 |
- 返回类型:String类型值, 长度为otpLength
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//生成OTP
int tc = 60;// 以秒为单位的口令变化周期 0<tc<=60
byte[] c = Ints.toByteArrays(2147483647);//运算因子
String q = "Simkey";//挑战因子,ascii编码, 字符串长度>=4
int otpLength = 6;//otp的长度, 值大于等于6
String otp = cisssdk.getOTP(getContext(), tc, c, q, otpLength, progressListener);
Log.d(TAG, "OTP:" + otp);
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 检测是否需要打开蓝牙(检测oma通道的情况)
- 定义:
| 检测是否需要打开蓝牙(检测oma通道的情况) | |
|---|---|
| 接口名称 | needOpenBle |
| 接口描述 | 检测是否需要打开蓝牙(检测oma通道的情况) |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| activity | Activity | 无 | |
| progressListener | CISSProgressListener | 进度,提示 | 异步回调提示和结果,可以为空 |
- 返回类型:boolean类型值, true:需要打开蓝牙; false: 不需要打开蓝牙
- 代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
try {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
boolean needOpenBle = cisssdk.needOpenBle(getContext(), mProgressListener);
if (needOpenBle) {
//ToDo:需要打开蓝牙, 动态权限申请
}
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# P7数字信封加密
- 定义:
| P7数字信封加密 | |
|---|---|
| 接口名称 | p7EnvelopEncrypt |
| 接口描述 | p7格式的数字信封加密, 目前仅支持国密算法 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| cert | byte[] | 证书 | 一般传入加密证书而不是签名证书 |
| data | byte[] | 要加密的数据 | 无 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回:byte[] 数组
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
//获取加密证书
byte[] encCert = cisssdk.readCer(getContext(), false, progressListener);
Log.d(TAG, "加密证书:" + HexStringConvert.parseByte2HexStr(encCert));
//要加密的数据
byte[] plain = "simkey P7Envelop test".getBytes(StandardCharsets.UTF_8);
//数字信封加密
byte[] envelop = cisssdk.p7EnvelopEncrypt(getContext(), encCert, plain, progressListener);
Log.d(TAG, "p7数字信封加密结果:" + HexStringConvert.parseByte2HexStr(envelop));
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- 返回十六进制显示:
30820156060A2A811CCF550601040203A0820146308201420201013181ED3081EA0201013058304A310F300D06035504030C06E982B9E5AE8131143012060355040A0C0B4349535320E5BA94E794A831143012060355040B0C0B3138313638303536363636310B300906035504061302434E020A2ACC4C3A8D42E7AFDFD7300D06092A811CCF5501822D030500047C307A022100DC22A9613A5615F43C4F6A9923FE08E3268BF36703746E2BE1E5BC122CCB00D60221008D1DA31B5F46193B84C24C2AD28521E1438C3DFF33264DA63571EE3B9172127F04207139D5BE94DDE0F297896CDFC8382BF97862F2B0E7EE6B9F8486856F2E5B1D170410A45291865324EC24FEF01A6EFFA8D43E304D060A2A811CCF550601040201301D06092A811CCF550168010404107F631A2BA904A37CD0A9542E2CF684EB802065C43EEFA0619709A8F83F089F4C80F7CE4F5BFDCD805EF57CE141F2C9978A73
1
# P7数字信封解密
- 定义:
| P7数字信封解密 | |
|---|---|
| 接口名称 | p7EnvelopDecrypt |
| 接口描述 | p7格式的数字信封解密, 目前仅支持国密算法 |
| 使用者 | 应用客户端 |
- 输入参数:
| 参数 | 数据类型 | 说明 | 备注 |
|---|---|---|---|
| context | Context | 上下文对象 | 要把当前Activity的对象传入,否则需要打开手机的悬浮窗设置 |
| cerType | boolean | 是否是签名密钥对加密 | true:使用签名私钥解密; false:使用加密私钥解密 |
| envelope | byte[] | 要解密的数字信封 | 无 |
| progressListener | CISSProgressListener | 回调提示 | 异步回调提示和结果,可以为空 |
返回:byte[] 数组
代码示例
//================================================
private static final String TAG = "CISSSDKTest";
private static final ExecutorService es = Executors.newSingleThreadExecutor();
//获取到上下文:
public Activity getContext() {
return this;
}
//================================================
Runnable runnable = new Runnable() {
@Override
public void run() {
//获取CISS SDK实例, 可以使用单例模式, CISSSDKHolder源码在本章最后
CISSSDK cisssdk = CISSSDKHolder.getInstance(getContext());
//CISSProgressListener:进度监听, 如果不想监听可以传入null
CISSProgressListener progressListener = new CISSProgressListener() {
@Override
public void onProgressListenNormal(String msg) {
//此处为正常提示
Log.d(TAG, "msg:" + msg);
}
@Override
public void onProgressListenError(int errorCode, String errorMsg) {
//此处为错误信息
//ErrorCode:错误代码
//msg: 错误描述
Log.e(TAG, String.format("onError:code:%d,msg:%s", errorCode, errorMsg));
}
};
//连接
ConnectConfig connectConfig = ConnectConfig.newBuilder()
.useOMA()
.useBleByPhone("13777777777")//需要联网
.notifyConnectResult()
.build();
boolean connect = cisssdk.connectSimKey(getContext(), connectConfig, progressListener);
Log.d(TAG, "连接结果:" + connect);
if (!connect) {
Log.w(TAG, "连接失败!");
return;
}
byte[] decrypted = cisssdk.p7EnvelopDecrypt(getContext(), false, envelop, progressListener);
Log.d(TAG, "p7数字信封解密结果:" + new String(decrypted, StandardCharsets.UTF_8));
}
};
es.submit(runnable);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- 返回 UTF-8 显示: simkey P7Envelop test
# CISSSDKHolder源码
- 代码
import android.content.Context;
import com.asiainfo.sec.libciss.ciss.CISSSDK;
import com.asiainfo.sec.libciss.ciss.impl.CISSSDKFramImpl;
public final class CISSSDKHolder {
private static volatile CISSSDK mInstance;
private CISSSDKHolder() {
}
public static CISSSDK getInstance(Context context) {
if (mInstance == null) {
synchronized (CISSSDKHolder.class) {
if (mInstance == null) {
mInstance = new CISSSDKFramImpl(context.getApplicationContext());
}
}
}
return mInstance;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25