摘要:对于数据安全性高的场景,客户需要对接口返回数据进行加密,客户端再进行解密。为了提升接口返回数据的安全性,支持接口返回数据内容的脱敏加密返回,即针对data接口返回数据加密,每个应用单独配置密钥,支持多种客户端编程语言进行解密。
对于数据安全性高的场景,客户需要对接口返回数据进行加密,客户端再进行解密。为了提升接口返回数据的安全性,支持接口返回数据内容的脱敏加密返回,即针对data接口返回数据加密,每个应用单独配置密钥,支持多种客户端编程语言进行解密。
采用 AES加密算法。请注意:为方便维护,iv和ASE密钥保持一致。
AES(高级加密标准,Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护电子数据的机密性。以下是其核心要点:
对称加密:加密与解密使用同一密钥,需确保密钥安全传输。分组加密:将数据划分为128位(16字节)的固定块进行处理。密钥长度:支持128位、192位、256位三种密钥,安全性递增(如AES-128、AES-256)。抗攻击性:目前无已知高效攻击方式,暴力破解AES-128需数万亿年(假设每秒尝试1亿亿次)。进入 开发平台的应用管理,点击【加密配置】按钮,在【接口数据加密开关】切换到【开启】。
首次配置加密时,请先【重新生成】ASE密钥。
点击【保存】后立即生效。
如上,当需要重置应用数据加密的密钥时,在【加密配置】弹窗,【重新生成】ASE密钥后保存,即可生效。
针对简单的hello world接口,未开启加密的返回是:
{"code": 200,"message": "SUCCESS","data": {"hello_world": "hello world"}}开启加密后,针对data字段返回的简单字符串加密。加密返回是:
{"code": 200,"message": "SUCCESS","data": "771272354e5401696a502a4a86e89a02d2c1b1cbba1bbe4a8b2d3600b9a7572a"}针对返回的长数据的加密,data的值被AES加密后是:
解密效果,
以下示例中,将使用:
明文(原始数据)test密文(加密数据)0a2f4f5923cc98b81fe0ea29f0f2ce16AES密钥32dWoR8HEPIiwdjuiv32dWoR8HEPIiwdju使用Hutool工具包:https://plus.hutool.cn/pages/5ddded/ 。
import cn.hutool.crypto.Mode;import cn.hutool.crypto.Padding;import cn.hutool.crypto.symmetric.AES;String data = "0a2f4f5923cc98b81fe0ea29f0f2ce16";String aesKey = "32dWoR8HEPIiwdju";AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, aesKey.getBytes,aesKey.getBytes);String decryptData = aes.decryptStr(data);PHPPythonfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import unpadkey = "32dWoR8HEPIiwdju".encode("utf-8") ## AEC密钥data = '0a2f4f5923cc98b81fe0ea29f0f2ce16' # 待解密数据data=bytes.fromhex(data)cipher = AES.new(key,AES.MODE_CBC,key) # 创建加密对象decrypted = unpad(cipher.decrypt(data),AES.block_size) # 解密操作print(decrypted.decode("utf-8")) # 输出解密后的数据// 提供的密文、密钥和IVvar ciphertext = "ad8749ea0a206e935992e3b46f6bc78a3c90f936020fea78ccbd083171fb8f227d7dda924e99ff6d9781bcf044a4e19f";var key = CryptoJS.enc.Utf8.parse("9bjjxs3p8u15n4iv"); // 密钥需要转换为Utf8格式var iv = CryptoJS.enc.Utf8.parse("9bjjxs3p8u15n4iv"); // IV也需要转换为Utf8格式// 将密文从Hex格式转换为CryptoJS可以处理的格式var ciphertextHex = CryptoJS.enc.Hex.parse(ciphertext);// 使用CryptoJS进行CBC解密var plaintext = CryptoJS.AES.decrypt({ciphertext: ciphertextHex}, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});var str = plaintext.toString(CryptoJS.enc.Utf8);document.getElementById('output').innerHTML = str;// 将解密后的结果转换为字符串并输出console.log(str);管理后台管理员可以从管理后台的【应用管理】,进入【编辑】后重置 应用的密钥,开启或关闭接口数据加密,保存后立即生效。
YesApi Pro一套针对API接口进行快速研发、管理、开放以及收费的 软件系统、源代码和解决方案,专为企业研发和设计。
YesApi Pro 旗舰版 Java版 演示环境:
平台首页:http://java.demo.yesapi.cn/
开放平台:http://java.demo.yesapi.cn/platform/
管理后台:http://java.demo.yesapi.cn/admin/
技术文档:http://java.demo.yesapi.cn/wiki/
来源:小肖科技讲堂