RSA加密解密的例子非常多,但是已知pubkey,然后进行RSA公钥加密的很少,原理都差不多,
下面就是个简单的例子:
首先拿到pubkey,拿到是字符串的形式,需要转一下,然后进行加密,返回的是已经加密好的字符串。
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
import com.epoint.core.utils.config.ConfigUtil;
public class RsaUtils
{
/**
* RSA最大加密明文大小
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
//已拿到的公钥串
private static String PUBLICKEY = "已知的公钥串";
/**
*
* 根据公钥加密
* @param data
* @return
* @throws Exception
* @exception/throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public static String encrypt(String data) throws Exception{
byte[] decode = Base64.decodeBase64(PUBLICKEY);
PublicKey pubKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decode));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] dataByte = data.getBytes("UTF-8");
int inputLen = dataByte.length;
ByteArrayOutputStream out= new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(dataByte, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(dataByte, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
String outStr = Base64.encodeBase64String(encryptedData);
return outStr;
}
}