X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance("RSA"); //获取公钥对象 PublicKey publicKey = keyFactory.generatePublic(x509KeySpec); //RSA/ECB/PKCS1Padding String temp = keyFactory.getAlgorithm(); //返回实现指定转换的 Cipher 对象 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data);
最近在接入银联超级转账时遇到了一些加密问题,再此备份一下,以防忘记。
这次主要的问题是 实现Cipher转换对象时出的问题,那家不靠谱的代理公司使用的是
Cipher.getInstance(keyFactory.getAlgorithm());
keyFactory.getAlgorithm());
the name of the algorithm associated with this KeyFactory
获得的值就是RSA,所以根本就没有按格式转换导致加密错误。
而RSA/ECB/PKCS1Padding 是指补足位数,不足8位的用0x00补齐,少8位要补足8个 0x00
常用的还有RSA/ECB/PKCS5Padding 这个是缺几位就用几补足,类似缺2位就补足 0x02