# FinAuth 海外接口统一加密说明文档
# 1 加密说明
# 1.1 加密方案概述
为保护用户敏感信息不被泄露,在调用 verify、liveness、compare 海外接口时,FinAuth 会对接口入参、返回值中包含的用户字符串信息、图片数据进行加密处理。海外环境仅支持 RSA 加密,不支持国密 SM2 加密。整体加密分为「入参加密」和「返回值加密」两套规则。
# a. 接口传入参数加密
加密方法
由原力金智生成密钥对,并在控制台对外提供公钥;应用方调用接口时使用 FinAuth 公钥对请求参数加密,原力金智服务端使用私钥完成解密。
加密内容
| 接口 | 加密参数 | 说明 |
|---|---|---|
| verify | image | 用户传入的自有照片 |
| verify | image_ref | 由应用方提供的参照人脸照片 |
| liveness | image | 用户传入的自有照片 |
| compare | image | 用户传入的自有照片 |
| compare | image_ref | 由应用方提供的参照人脸照片 |
# b. 接口返回值加密
加密方法
由应用方自行生成密钥对(公钥+私钥),将公钥配置至 FinAuth 控制台,私钥由应用方本地保管;原力金智使用应用方公钥对接口返回值加密,应用方使用本地私钥完成解密。
加密内容
| 接口 | 加密参数 | 说明 |
|---|---|---|
| verify | images | 一组采集的用户照片,包含 image_best |
| liveness | images | 一组采集的用户照片,包含 image_best |
# 1.2 如何开启加密
通过请求参数 encryption_type 控制加密开关,系统支持两种非对称加密算法,海外环境仅 RSA 生效,配置规则如下:
- encryption_type = 0:不开启加密
- encryption_type = 1:使用国密 SM2 加密(海外环境不支持)
- encryption_type = 2:使用 RSA 加密(海外唯一可用方案)
# 2 密钥配置
# 2.1 如何生成密钥
# a. SM2 生成密钥(海外不支持)
国密 SM2 加解密基于标准 SM2 算法实现,公私钥必须为标准 PEM 格式。
生成参考:https://www.cnblogs.com/toolsMan/p/14045404.html
公钥示例
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEpo36SP78mb5b3e3SGdE+QAn9X2ip
B9MW49nGNzOTe40ze78tnu5Th+g7VtiALeQdZHID2OZq2GIqCPvyrweU6w==
-----END PUBLIC KEY-----
私钥示例
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEID/OxQtw1fC4x1TtskSo6UQlCk5bJ1B6A8JXw9FxGnkKoAoGCCqBHM9V
AYItoUQDQgAEpo36SP78mb5b3e3SGdE+QAn9X2ipB9MW49nGNzOTe40ze78tnu5T
h+g7VtiALeQdZHID2OZq2GIqCPvyrweU6w==
-----END EC PRIVATE KEY-----
# b. RSA 生成密钥(海外通用)
RSA 加解密规范:密钥长度 1024bit,填充方式 PKCS#1,公私钥必须为标准 PEM 格式。
生成参考:https://blog.csdn.net/aa464971/article/details/51035200
公钥示例
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBSc4iLjnf7CQsF7KrmmXWXMDA
xPZbXIxf0Gdf5QsoBTOgwzSTIUgbdh7srEFrq3f2wjcpRuFHhhRNP1UujQM3onXi
La9SyckZluJhlFHmurY9P3YVnnXdtw4tMDHIkWhFIygArN4dYkbQdNw4HUMvKixu
JIZfGkDfBqT+0p2FfwIDAQAB
-----END PUBLIC KEY-----
私钥示例
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCBSc4iLjnf7CQsF7KrmmXWXMDAxPZbXIxf0Gdf5QsoBTOgwzST
IUgbdh7srEFrq3f2wjcpRuFHhhRNP1UujQM3onXiLa9SyckZluJhlFHmurY9P3YV
nnXdtw4tMDHIkWhFIygArN4dYkbQdNw4HUMvKixuJIZfGkDfBqT+0p2FfwIDAQAB
AoGABkxRyZPPIGLWLgrOYbXjqTowmSxNWcXKDpW4vFfv7fhiArARewgIWuDH3Rk4
a4X89YQ8wFc7Q8PsqQjocw34nNtea+qGZWFV1EQ/aaVpYrgCDjNAx9QTcPgVbq3/
QMdWoLAzdaOao7glo5VxG5+WQYJs1mjtPJdT2p1kSngol8kCQQCEyVKhz0S6N4dY
1yBaYFV/dK8HvdpxSPkfOHC3KePIkpv12vuGKjVTHm2PtMvm83UA4hwzEIAHATqS
6q/ilNCDAkEA+UGGRFCb2igRm6pKgaVKYJsAE1xtySJnGD5mDPr724ewzvQ4zdVv
JWcvX41jVf6rLt3b1qKcDm2u2QLMmTRuVQJAZWlsVm/5yU6Ha+5Ao0VXhtQSqRLy
NfrJaHKugvTXJmPyAL6RwlGSEDz45/vojiX5ggcuCkHbxX3GwlXCpoWJCQJAD0kQ
ZdIXrKo2YjhwN0EerYvz1jwd027Tqa3x7ivaFB1fH2HkteK33TBVvGNcSyLB9q7O
U3xHW68oQNCmIWMQvQJAVdDBEf3y65l/k2Ian3mJdpZT7JGOBjGbnoXNidVv8T+J
FlJtfbj7eoZne5bM1IDXDgPlYt36vFuPKvb89YvhCw==
-----END RSA PRIVATE KEY-----
# 2.2 如何上传密钥
登录 FinAuth 控制台,进入「应用配置」-「信息加密」模块,将生成的公钥分别填入 RSA 加密配置或 SM2 加密配置栏,点击提交。若提交按钮下方展示 FinAuth RSA 公钥 / FinAuth SM2 公钥,代表密钥上传生效。

# 3 加解密示例说明
# 3.1 图片加密(全接口通用)
# a. 加密对象
| 接口 | 加密参数 | 说明 |
|---|---|---|
| verify | image / image_ref | 用户自有照片、参照人脸照片 |
| liveness | image | 用户传入的自有照片 |
| compare | image / image_ref | 用户自有照片、参照人脸照片 |
# b. 加密说明
1. 读取原始图片字节,计算文件长度 len;
2. **len ≤ 1024**:全文加密图片数据,将加密后数据长度转为 4 字节拼接至文件尾部,整体 Base64 编码;
3. **len > 1024**:仅加密前 1024 字节,剩余数据明文拼接,加密段长度转为 4 字节拼接在整个文件尾部,整体 Base64 编码。
# c. 通用逻辑
<=1024: 原始图片data ---→ ENC加密后data1 ---→ data1+len(data1) ---→ Base64编码输出
len>1024: 原始图片data ---→ 前1024字节ENC加密得到data1 + 剩余明文data2 ---→ data1+data2+len(data1) ---→ Base64编码输出
# d. 实例公式(len>1024)
en_data = ENC(image[1024]) // 加密前1024个字节
Base64.en(en_data+plain_data+len(en_data)); // 最终Base64结果
# 3.2 图片解密(verify、liveness 接口返回值)
# a. 解密对象
| 接口 | 参数 | 说明 |
|---|---|---|
| verify | images | 采集用户照片集合(含 image_best) |
| liveness | images | 采集用户照片集合(含 image_best) |
# b. 解密对象
- 对返回的 Base64 密文解码,获取二进制数据;
- 截取尾部 4 字节,转换为整型得到加密数据长度 len;
- 截取前 len 字节使用本地私钥解密;
- 解密数据 + 剩余明文数据拼接,剔除尾部 4 字节,还原原始图片。
# b. 实例公式
DEC 为解密方法:RSA 对应 RSA.dc,SM2 对应 SM2.dc
b_data = Base64.dc(data); // Base64解码
len = int(b_data[:-4]); // 获取加密段长度
a_data = DEC(b_data[len]); // 解密加密片段
res_data = a_data+b_data[len:-4];// 拼接得到原图
# 4 加解密示例代码
完整可运行的加解密 Demo 代码,请联系 FinAuth 客服或商务人员获取。