【问题标题】:Getting RSA public key from PKCS1 key从 PKCS1 密钥获取 RSA 公钥
【发布时间】:2019-09-30 10:32:45
【问题描述】:

我得到了以下格式的公钥,我需要使用 java 来使用这个密钥加密一些数据

-----开始 RSA 公钥-- MIGJAoGBAKDZp/3e4w1nJA/ImDMgaGowWfTnhlFkrvS86LBc6wh1/zBRt51/2F/o/ZzaA5mZ nx5YMlhDOf3vHyzyO4KzYlG8md3RQU7eKQQDxgRfW1v0f7WVQoC2Dxbupyz0JVV4jQStYUYW ifGsh76wI3rkzlq3F2Ea/+jqMxX/AZOO30tBAgMBAAE= -----结束 RSA 公钥-----

【问题讨论】:

    标签: java encryption rsa pkcs#1


    【解决方案1】:

    您可以使用BouncyCastle 库来实现这一点。您的密钥在 PEM fromat 中。要阅读它,您可以使用PEMParser

    private static PublicKey readPublicKey(String path) throws InvalidKeySpecException, NoSuchAlgorithmException, IOException {
        PEMParser pemParser = new PEMParser(new FileReader(path));
        Object object = pemParser.readObject();
        SubjectPublicKeyInfo subjectPublicKeyInfo = (SubjectPublicKeyInfo) object;
    
        RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(subjectPublicKeyInfo);
    
        RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
        KeyFactory kf = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
        return kf.generatePublic(rsaSpec);
    }
    

    然后用这个密钥加密:

    PublicKey publicKey = readPublicKey("src/main/resources/key.pem");
    
    String dataToEncrypt = "myMessage";
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", new BouncyCastleProvider());
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] encrypted = cipher.doFinal(dataToEncrypt.getBytes(StandardCharsets.UTF_8));
    

    测试版本:bcpkix-jdk15onbcprov-jdk15on

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2012-01-02
      • 2020-08-11
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多