本文適用于持牌金融客戶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); } }
文檔內容是否對您有幫助?