| @@ -1,6 +1,7 @@ | |||||
| package com.github.binarywang.wxpay.v3.util; | package com.github.binarywang.wxpay.v3.util; | ||||
| import me.chanjar.weixin.common.error.WxRuntimeException; | import me.chanjar.weixin.common.error.WxRuntimeException; | ||||
| import sun.misc.BASE64Decoder; | |||||
| import java.io.ByteArrayOutputStream; | import java.io.ByteArrayOutputStream; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| @@ -8,9 +9,11 @@ import java.io.InputStream; | |||||
| import java.security.KeyFactory; | import java.security.KeyFactory; | ||||
| import java.security.NoSuchAlgorithmException; | import java.security.NoSuchAlgorithmException; | ||||
| import java.security.PrivateKey; | import java.security.PrivateKey; | ||||
| import java.security.PublicKey; | |||||
| import java.security.cert.*; | import java.security.cert.*; | ||||
| import java.security.spec.InvalidKeySpecException; | import java.security.spec.InvalidKeySpecException; | ||||
| import java.security.spec.PKCS8EncodedKeySpec; | import java.security.spec.PKCS8EncodedKeySpec; | ||||
| import java.security.spec.X509EncodedKeySpec; | |||||
| import java.util.Base64; | import java.util.Base64; | ||||
| public class PemUtils { | public class PemUtils { | ||||
| @@ -55,4 +58,32 @@ public class PemUtils { | |||||
| throw new WxRuntimeException("无效的证书", e); | throw new WxRuntimeException("无效的证书", e); | ||||
| } | } | ||||
| } | } | ||||
| public static PublicKey loadPublicKey(InputStream inputStream) { | |||||
| try { | |||||
| ByteArrayOutputStream array = new ByteArrayOutputStream(); | |||||
| byte[] buffer = new byte[1024]; | |||||
| int length; | |||||
| while ((length = inputStream.read(buffer)) != -1) { | |||||
| array.write(buffer, 0, length); | |||||
| } | |||||
| String publicKey = array.toString("utf-8") | |||||
| .replace("-----BEGIN PUBLIC KEY-----", "") | |||||
| .replace("-----END PUBLIC KEY-----", "") | |||||
| .replaceAll("\\s+", ""); | |||||
| KeyFactory kf = KeyFactory.getInstance("RSA"); | |||||
| return kf.generatePublic( | |||||
| new X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(publicKey))); | |||||
| } catch (NoSuchAlgorithmException e) { | |||||
| throw new WxRuntimeException("当前Java环境不支持RSA", e); | |||||
| } catch (InvalidKeySpecException e) { | |||||
| throw new WxRuntimeException("无效的密钥格式"); | |||||
| } catch (IOException e) { | |||||
| throw new WxRuntimeException("无效的密钥"); | |||||
| } | |||||
| } | |||||
| } | } | ||||