已知公钥或私钥是一串字符串,例如: CC7AB38AA3C8873AD61CF5E818FA980D305A448554342 CD9E1F77DB8609DB9396B916D7FCB0BE75E561168D1EC A2E2B6AD14285F1CEB8ED7A8FDEE7CA37DF324D792F14 D3D3C588B8A6569A8B62AE62E6D44F51461738810F2 ...
如何生成RSAPublicKey或RSAPrivateKey.

解决方案 »

  1.   

    比如,通过以下方法,生成的RSA公匙和私匙文件,则可以直接调用,而用题目所示的字符串,则不行
        /** *//**
         * 生成2048位的RSA公匙和私匙
         */
        public static void generator(
                String privateKeyFileName) throws Exception
        {
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
            kpg.initialize(1024);
            KeyPair kp = kpg.generateKeyPair();
            PublicKey puk = kp.getPublic();
            PrivateKey prk = kp.getPrivate();
            FileOutputStream fos1 = new FileOutputStream("mypub.key");
            FileOutputStream fos2 = new FileOutputStream("mypri.key");
            ObjectOutputStream oos1 = new ObjectOutputStream(fos1);
            ObjectOutputStream oos2 = new ObjectOutputStream(fos2);
            oos1.writeObject(puk);
            oos2.writeObject(prk);
            oos1.close();
            oos2.close();
            fos1.close();
            fos2.close();
            System.out.println("公匙生成成功!公匙文件为mypub.key");
            System.out.println("私匙生成成功!私匙文件为mypri.key");
       /** *//**
         * 解密方法
         * 
         * @param String
         *            私匙文件
         * @param String
         *            加密后的字符串
         * @return String 解密后的字符串
         */
        public String RSA2S(String fileName, String rsaStr) throws Exception
        {
            // 获取私匙
            RSAPrivateKey rsaprk = RSAKey.getPrivateKey(fileName);
            // 获取私匙参数d,n
            BigInteger d = rsaprk.getPrivateExponent();
            BigInteger n = rsaprk.getModulus();
            // 获取密文
            BigInteger c = new BigInteger(rsaStr);
            // 解密计算
            BigInteger m = c.modPow(d, n);
            // 转换成String
            byte[] ctext = m.toByteArray();
            return new String(ctext);
        }
        }
      

  2.   

    忘了Java还有串行化了,不过要是别人把3L的文件直接读取了,不就容易泄漏私钥了吗?
      

  3.   

    忘了Java还有串行化了,不过要是别人把3L的文件直接读取了,不就容易泄漏私钥了吗?