使用RSA加密时遇到的问题!

  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

原文地址:https://www.cnblogs.com/leonli/p/3413788.html