公钥和私钥是经过base64编码的字符串。
使用默认的填充方式,已做分段加密 解决 明文或者密文长度太长的问题
出现的问题
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid p
arse error, not a sequence
缺少RSA秘钥提供商BC,即BouncyCastleProvider
可以在mvn网站下载https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk16
在代码中,
// static {
// Security.addProvider(new BouncyCastleProvider());
// }
完整代码附上:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RsaEncrypter {
private static Logger mLogger = LoggerFactory.getLogger(RsaEncrypter.class);
// private static String publicKey = "";
// private static String privateKey =