0%

Java读取RSA pem公钥 使用公钥验证签名

之所以要记录是因为网上找了好久,试了好多方法,基本上都不好使. 签名sign做了base64

        BASE64Decoder base64decoder = new BASE64Decoder();
    try {
        //读取pem证书
        BufferedReader br = new BufferedReader(new FileReader("xxx.pem"));
        String s = br.readLine();
        StringBuffer publickey = new StringBuffer();
        while (s.charAt(0) != '-') {
            publickey.append(s + "\r");
            s = br.readLine();
        }
        byte[] keybyte = base64decoder.decodeBuffer(publickey.toString());
        KeyFactory kf = KeyFactory.getInstance("RSA");
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keybyte);
        PublicKey publicKey = kf.generatePublic(keySpec);
        BASE64Encoder bse=new BASE64Encoder();
        System.out.println("pk:"+bse.encode(publicKey.getEncoded()));

        //被签的原文
        String toSign="sxxxsasdsss";
        //生成的签名
        String sign="xxxxx";

        Signature signature = Signature.getInstance("SHA1withRSA");
        signature.initVerify(publicKey);
        signature.update(toSign.getBytes());
        boolean verify = signature.verify(base64decoder
            .decodeBuffer(
                sign));
        System.out.println(verify);
    } catch (Exception e) {
        e.printStackTrace();
    }