重构RSA加密方法

This commit is contained in:
Binary Wang 2018-01-04 23:22:57 +08:00
parent 5dcd06b620
commit 15a33a7d46
2 changed files with 9 additions and 13 deletions

View File

@ -41,8 +41,8 @@
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.59</version>
</dependency>
<dependency>

View File

@ -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);