如何将ASCII编码RSA公钥转换为publickey对象``?页面传到后台是公钥的ASCII编码字符串.
现在在后台这么写的:
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pubKey.getBytes());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKey publicKey = (RSAPublicKey)keyFactory.generatePublic(pubKeySpec);执行的时候异常:java.security.InvalidKeyException: invalid key format请教下应该怎么写``

解决方案 »

  1.   

    我不知道你所指的 ASCII 编码的 RSA 公钥具体是什么?下面这段代码使用 DER 或者 PEM 编码的 X.509 格式证书都可以获得公钥。import java.io.FileInputStream;
    import java.security.PublicKey;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateFactory;public class Cert {    public static void main(String[] args) throws Exception {
            CertificateFactory factory = CertificateFactory.getInstance("X.509");
            Certificate cert = factory.generateCertificate(new FileInputStream("e:/security/test.cert.pem"));
            PublicKey pubKey = cert.getPublicKey();
        }
    }
      

  2.   

    我估计你指的 ASCII 编码应该是 PEM 格式的证书,估计是这样的:-----BEGIN CERTIFICATE-----
    ....
    ....
    -----END CERTIFICATE-----贴不全,CSDN 说这有非法字符!
      

  3.   

    是用电子钥匙的api在页面获得的ASCII编码的DER格式公钥字符串.
    例如这样的:
    30818902818100B6FA647C106B69AD474145F0A5EE8FC7B760E77B049CCB059C0D8E7B15DBE63DD4B260A84E6D14748553287A022A39C0F69740978088660CC7E26069FE11BFE0BD2F296771887AF632FB2F5DB0452ADD4D8E00DBC679A9AB95C61CDB2B4B072E37737140DD0131745FCACDF8638309E552F03F0CD00A6313EF72E8E19051BE290203010001
    请问我如何在后台把这个字符串变成公钥格式呢`?
      

  4.   

    基本代码是这样的,但是你贴出来的那个公钥有问题,解析不了。我用随机产生的公钥是可以还原的。import java.security.KeyFactory;
    import java.security.PublicKey;
    import java.security.spec.KeySpec;
    import java.security.spec.X509EncodedKeySpec;public class Cert {    public static void main(String[] args) throws Exception {
            String str = "30818902818100B6FA647C106B69AD474145F0A5EE8FC7B760" +
                  "E77B049CCB059C0D8E7B15DBE63DD4B260A84E6D1474855328" +
                  "7A022A39C0F69740978088660CC7E26069FE11BFE0BD2F2967" +
                  "71887AF632FB2F5DB0452ADD4D8E00DBC679A9AB95C61CDB2B" +
                  "4B072E37737140DD0131745FCACDF8638309E552F03F0CD00A" +
                  "6313EF72E8E19051BE290203010001";
            
            System.out.println(str.length());
            byte[] keyBytes = toBytes(str);
            
            KeySpec keySpec = new X509EncodedKeySpec(keyBytes);
            KeyFactory factory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = factory.generatePublic(keySpec);
        }
        
        private static byte[] toBytes(String str) {
            if(str == null) {
                throw new IllegalArgumentException("binary string is null");
            }
            char[] chs = str.toCharArray();
            byte[] bys = new byte[chs.length / 2];
            int offset = 0;
            int k = 0;
            while(k < chs.length) {
                bys[offset++] = (byte)((toInt(chs[k++]) << 4) | toInt(chs[k++]));
            }
            return bys;
        }
        
        private static int toInt(char a) {
            if(a >= '0' && a <= '9') {
                return a - '0';
            }
            if(a >= 'a' && a <= 'f') {
                return a - 'a' + 10;
            }
            if(a >= 'A' && a <= 'F') {
                return a - 'A' + 10;
            }
            throw new IllegalArgumentException("parameter \"" + a + "\"is not hex number!");
        }
    }
      

  5.   

    没换行,这串应该是 key 的十六进制字符串。
      

  6.   


    你好,想向你请教一下我现在有一个公钥文件(编过码的)文件的内容如下
    -----BEGIN PUBLIC KEY-----
    MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCV45mPNyaOpkDJwMN8UMK7uVf6
    9GrzwWdnEog2wyzATCpltKCsQvFVl35pbYzF9d0jf0AsbgIu6kYejTQSnDaEJIKc
    Vlj4w4bUJ+K+tMBhOBfGyTQoZ2vQyO5D7B1gL0gmg2cToRskN8cAZdU1/gsObvii
    NdgZ8bFARJXd3qDH2QIBAw==
    -----END PUBLIC KEY-----
    现在我也不知道他是什么格式的编码,现在我需要将他转换成RSA的公钥进行加密,请问一下该怎么弄?