RSA非对称加密,由于其对加密的明文长度有限制,所以通常配合对称加密来操作,即把对称加密中的秘钥加密传送来保证用对称加密的安全性。当我用RSA公钥加密AES的 密钥之后,存入mysql之后,然后再取出来进行解密,但是报错javax.crypto.BadPaddingException: Data must start with zero。我改了半天,终于想了一个解决办法,虽然有些麻烦,但是有效果。希望大家多多指教。其实解决思想很简单,就是把加密后的密文放入一个对象中,然后把对象序列化再存入数据库,然后再把对象从数据库取出,再取出其中的密文域的密文。
RSA加密部分:
package com.test;
import java.security.*;
import java.util.ArrayList;
import javax.crypto.*;
public class RSA {
private KeyPairGenerator kePaGen=null; //秘密钥匙生成器;
private KeyPair keyPair=null; //钥匙对,公尺 和米尺;
private PublicKey publicKey=null; //共匙;
private PrivateKey privateKey=null; //密匙;
private int keySize =2048; //密匙长
public RSA(int keysize) {
this.keySize= keysize;
try{
this.kePaGen= KeyPairGenerator.getInstance("RSA"); //
this.kePaGen.initialize(this.keySize);
//
this.keyPair=this.kePaGen.genKeyPair();
this.privateKey=this.keyPair.getPrivate();
this.publicKey=this.keyPair.getPublic();
//this.abcharRsaCipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
}catch( Exception err){
err.printStackTrace();
}
}
public static String encripyRSA(String platxt,PublicKey publickey)
{
String cipherStr=null; //返回的加密后的字