RSA公钥pkcs1转pkcs8并且进行加密

 
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
 
import javax.crypto.Cipher;
 
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Primitive;
 
 
public class RSAUtils {
 
    static String pubKey ="" + 
    	"MIGJAoGBAPuIu5PNY+hwBWLNyV1+4rJALTo8i57X04M9+lad25rMrA4V/tdpf8jy\r\n" + 
    	"96h7hP+zZF1dWQiDVzUEg7cUhZ5kXIWn8MPUizkooYTCeaVZZKWWaDoOhupQFDx6\r\n" + 
    	"gL0se6BTQnEqVBkXIRet6dXiYmctzV+tc32VQdpoDmmbAAPKjpYdAgMBAAE=\r\n" + 
    	"";
 
    public static void main(String[] args) throws Exception {
	
	String str = "123456";
	System.out.println("result is :\n " + public_encrypt(str, pubKey));
	
    }
 
    /**
     * RSA加密:适合pkcs1 格式转 pkcs8 内容摘抄自stackoverflow,作者:President James K. Polk
     * @param str
     * @param publicKey
     * @return
     * @throws Exception
     */
    public static String public_encrypt(String str, String publicKey) throws Exception {
 
 
	
	byte[] decoded = Base64.decodeBase64(publicKey);
	
	ASN1Primitive asn1Prime = new ASN1InputStream(decoded).readObject();
	
	org.bouncycastle.asn1.pkcs.RSAPublicKey rsaPub = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(asn1Prime);
	
	 KeyFactory kf = KeyFactory.getInstance("RSA");
	 
	 
	 PublicKey generatedPublic =  kf.generatePublic(new RSAPublicKeySpec(rsaPub.getModulus(), rsaPub.getPublicExponent()));
	 
	 
//	X509EncodedKeySpec keySpec=new X509EncodedKeySpec(decoded);
//	
//	PublicKey generatedPublic = kf.generatePublic(keySpec);
//	
	Cipher cipher = Cipher.getInstance("RSA");
 
	cipher.init(Cipher.ENCRYPT_MODE, generatedPublic);
	
	String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
	
	return outStr;
    }
 

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值