本文适用于持牌金融客户KYC留存用户认证凭证合规需求。当客户通过支付宝隐私办资质审核且功能配置完成后,可参考本文生成RSA公钥加密后的AES密钥,以便在查询认证结果时获取加密的相关图片。
适用产品方案
加密流程
首先您需要使用AES算法对16位字符串(随机生成)进行加密,然后对加密后的字符串进行Base64编码。
参考以下代码示例使用RSA公钥对Base64编码的AES密钥进行加密,即可获取到业务参数。
获取到加密后的参数后,在查询实人认证结果时,可传入encToken参数中,用于获取加密的相关图片。
import com.alibaba.fastjson.JSON; import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sun.misc.BASE64Decoder; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; public class RSAUtils { private static final Logger LOGGER = LoggerFactory.getLogger(RSAUtils.class); private static final String CHARSET = "UTF-8"; /** *非对称加密密钥算法 */ private static final String RSA = "RSA"; /** *密填充方式 */ private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding"; /** *获取加密图片RSA公钥 */ private static final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxav0oL0tJJf1KxiM1rDBChK/ANM7yWkA/sjhZwfZRjPpbGuMLN2HDtfyyYKtj5jg8AggarvofiVmC0omyWiiZUeZ+z9pjH+SxgFbrf6rHPNNkg7Q6S8WgBUOMK+nyus3u2U7YkxJgk/qtGNM72VP8x2TJgGavZfxH1rfFdf041qVGxSSZBgtU+ic5TX31XbIeKCd+BBy+AZiBTnqE19rbSfqNebHRAQzOfwUBiMbvmnQ4FagH6cqLPyH+NMQm5fWHPkCdgNgf8sp+5Du7kgmUkLljxz2Zqg3fQlYSrCjSrmQs2brIuoMTeC91wWNjxyS56vcLRAjMUZsIGqPNHlScwIDAQAB"; public static String encrypt(String paramData) { try { byte[] paramDataBytes = paramData.getBytes(CHARSET); byte[] publicKeyDecode = Base64.decodeBase64(PUBLIC_KEY); byte[] rsaCryptoBytes = encryptByPublicKey(paramDataBytes, publicKeyDecode); return Base64.encodeBase64String(rsaCryptoBytes); } catch (Exception e) { LOGGER.info(JSON.toJSONString(e)); } return null; } /** * 用公钥对字符串进行加密 * @param data 原文 * @param publicKey 公钥 */ private static byte[] encryptByPublicKey(byte[] data, byte[] publicKey) throws Exception { // 得到公钥 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey); KeyFactory kf = KeyFactory.getInstance(RSA); PublicKey keyPublic = kf.generatePublic(keySpec); // 加密数据 Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING); cp.init(Cipher.ENCRYPT_MODE, keyPublic); return cp.doFinal(data); } }
文档内容是否对您有帮助?