From 15a33a7d4668dab94e2bf84c7b093f0e618a6a75 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Thu, 4 Jan 2018 23:22:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84RSA=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin-java-pay/pom.xml | 4 ++-- .../wxpay/service/impl/EntPayServiceImpl.java | 18 +++++++----------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml index 998b618df..ea6ccff02 100644 --- a/weixin-java-pay/pom.xml +++ b/weixin-java-pay/pom.xml @@ -41,8 +41,8 @@ org.bouncycastle - bcprov-jdk16 - 1.46 + bcpkix-jdk15on + 1.59 diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java index d97ca9312..b50a07862 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java @@ -8,10 +8,10 @@ import com.github.binarywang.wxpay.service.EntPayService; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.util.SignUtils; import org.apache.commons.codec.binary.Base64; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.jce.provider.JCERSAPublicKey; -import org.bouncycastle.openssl.PEMReader; -import org.bouncycastle.openssl.PasswordFinder; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; import javax.crypto.Cipher; import java.io.File; @@ -19,6 +19,7 @@ import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.security.PublicKey; import java.security.Security; /** @@ -107,15 +108,10 @@ public class EntPayServiceImpl implements EntPayService { try { Security.addProvider(new BouncyCastleProvider()); Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding"); - PasswordFinder passwordFinder = new PasswordFinder() { - @Override - public char[] getPassword() { - return "".toCharArray(); - } - }; + try (PEMParser reader = new PEMParser(new FileReader(publicKeyFile))) { + final PublicKey publicKey = new JcaPEMKeyConverter().setProvider("BC") + .getPublicKey((SubjectPublicKeyInfo) reader.readObject()); - try (PEMReader reader = new PEMReader(new FileReader(publicKeyFile), passwordFinder)) { - JCERSAPublicKey publicKey = (JCERSAPublicKey) reader.readObject(); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encrypt = cipher.doFinal(srcString.getBytes()); return Base64.encodeBase64String(encrypt);