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;}
}


















