敏感数据加解密
概述
在处理 API 请求时,特别是涉及到敏感数据(例如卡号、CVV、有效期 等)时,必须确保数据的安全性。为了保护这些敏感数据,我们使用了 RSA 加密算法,结合 ECB 模式和 OAEPPadding 填充方案进行加密。
RSA加密
加密算法
RSA/ECB/OAEPPadding
- RSA:一种非对称加密算法,使用公钥和私钥对数据进行加密和解密。
- ECB(电子密码本模式):一种加密模式,每个块独立加密,适用于加密长度相同的明文数据块。
- OAEPPadding:RSA 算法中的填充方案,提供了额外的安全性,防止了某些攻击类型。
加密和解密过程
- 生成密钥对:
- 生成 RSA 公钥和私钥。公钥用于加密数据,私钥用于解密数据。请参考上一篇文档 生成秘钥对 生成你的密钥,请安全存储你的私钥,并上传你的公钥到CodePay平台。
- 使用RSA加密,只需要使用CodePay的公钥,因此不需要生成密钥。如果需要解密CodePay返回的敏感数据,才需要使用你的私钥。目前业务场景中不存在返回敏感数据给开发者,因此可暂时忽略此步骤。
- 加密敏感数据:
- 使用 RSA 公钥对敏感数据进行加密。在我们的API使用场景中,当你请求CodePay时,请使用CodePay的公钥
GATEWAY_RSA_PUBLIC_KEY进行加密。 - 在加密过程中,使用 ECB 模式和 OAEPPadding 填充方案。
- 传递加密数据:
- 将加密的Byte数组编码为Base64字符串,以便于在网络上进行传输。将加密后的数据通过API进行传输。
- 解密数据:
- 接收方对加密字符串进行Base64解码后,使用 RSA 私钥对加密数据进行解密。
- 在解密过程中,使用相同的填充方案(OAEPPadding)。
提示
当你收到CodePay返回报文或Webhook通知报文的数据中,若包含加密数据,请按照同样的方法,使用你的私钥 APP_RSA_PRIVATE_KEY 进行解密。
注意事项
- 密钥管理:确保公钥和私钥的安全管理,不要将私钥暴露给未经授权的人员。
- 数据安全:加密前的数据应保持私密,不应在传输过程中泄露明文数据。
- 合规性:遵循适用的法规和标准(如 PCI-DSS)来处理敏感数据。
常见问题
- 对相同的明文进行RSA加密,得到的结果为什么每次都不一样?
RSA 加密每次对相同明文加密得到的结果不同是由于使用了随机填充机制。这是 RSA 加密过程中的一个重要特性,用于增强加密的安全性,防止加密模式攻击。
- 随机填充:在每次加密时,填充算法(如 OAEP)会生成新的随机数据。这些随机数据会与明文数据一起被加密,因此,即使明文数据相同,加密结果也会因为不同的随机填充而不同。
- 防止重放攻击:通过随机填充机制,RSA 加密可以避免重复的加密操作产生相同的密文,这对于防止某些类型的攻击(如重放攻击)是非常重要的。