[英]From String to java.security.PublicKey object gaves me an illegal character
[英]How can I construct a java.security.PublicKey object from a base64 encoded string?
我有一個來自外部源(Android 商店)的 bse64encoded 字符串公鑰,我需要使用它來驗證簽名內容。 如何將字符串轉換為 java.security.PublicKey 接口的實例。 如果這有所作為,我將使用 Java 6。
密鑰(可能)是使用標准 java lib 生成的,而不是充氣城堡(它來自遠程團隊,所以我不確定)。 他們的示例代碼說使用 Security.generatePublicKey(base64EncodedPublicKey); 但是標准 java 中的 Security 對象沒有這樣的方法。
上面答案的代碼
public static PublicKey getKey(String key){
try{
byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT);
X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(X509publicKey);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
好的咧嘴笑......試試這個
試試這個....
PublicKey getPublicKey(byte[] encodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException
{
KeyFactory factory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(encodedKey);
return factory.generatePublic(encodedKeySpec);
}
使用海綿城堡
public static PublicKey getPublicKeyFromString(String key) throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
org.spongycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey
= org.spongycastle.asn1.pkcs.RSAPublicKey.getInstance(decodeB64(key));
RSAPublicKeySpec keySpec
= new RSAPublicKeySpec(pkcs1PublicKey.getModulus(), pkcs1PublicKey.getPublicExponent());
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
你可以試試這個解決方案:
添加此依賴項:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.61</version>
並使用此方法:
private Key parsePublicKey(String publicKey) throws IOException {
PEMParser pemParser = new PEMParser(new StringReader(publicKey));
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo.getInstance(pemParser.readObject());
return converter.getPublicKey(publicKeyInfo);
}
這是一個代碼片段:
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPublicKeySpec;
import org.apache.commons.codec.binary.Base64;
try {
KeyFactory kf = KeyFactory.getInstance("RSA");
BigInteger modulus = new BigInteger(1, Base64.decodeBase64(this.stringValue("n")));
BigInteger exponent = new BigInteger(1, Base64.decodeBase64(this.stringValue("e")));
return kf.generatePublic(new RSAPublicKeySpec(modulus, exponent));
} catch (InvalidKeySpecException var4) {
throw new InvalidPublicKeyException("Invalid public key", var4);
} catch (NoSuchAlgorithmException var5) {
throw new InvalidPublicKeyException("Invalid algorithm to generate key", var5);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.