【问题标题】:Android-Java RSA decryptAndroid-Java RSA解密
【发布时间】:2014-11-24 21:46:41
【问题描述】:

我需要从一个二进制字符串为 RSA 算法创建一个公钥。

我的代码是:

String pubKey = "tihq/Gk3OUs5NzP+XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9DzKaIbdKexb/mRr";

byte[] keyBytes = Base64.decode(pubKey,Base64.DEFAULT);
//test if is correct: ok
Log.d("response keyBytes",new String(Base64.encode(keyBytes,Base64.DEFAULT)));

KeyFactory keyFactory = KeyFactory.getInstance("RSA");      
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);

RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(spec);
//PublicKey publicKey = (PublicKey) keyFactory.generatePublic(spec);

但我有这个错误:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

【问题讨论】:

    标签: java android rsa public-key


    【解决方案1】:

    已解决。 问题是我有模数和指数,所以我必须这样做:

    String pubKey = "tihq/Gk3OUs5NzP+XTRKXBwSxHtB0TWn0RREcpXEtp316tyD9DzKaIbdKexb/mRr"; //64 caratteri
    String exponent = "AQAB";
    
    byte[] keyBytes = Base64.decode(pubKey,Base64.DEFAULT);
    byte[] exponentByte = Base64.decode(exponent,Base64.DEFAULT);
    
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    
    RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(keyBytes), new BigInteger(exponentByte));
    RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
    

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多