0
は基本的に私は、OpenSSLを使用すると、このようになります署名を検証しようとしています:のPublicKey、Javaの
openssl dgst -sha256 -verify prime192v1-pub-v1.pem -signature signatureFile.bin < dataFile.bin
を...とAndroid上でそれを行うために、私はPublicKey
オブジェクトを作成する必要があります。私が使用しているメソッドは、の行kf.generatePublic(new X509EncodedKeySpec(encoded))
にスローします。
import org.spongycastle.util.encoders.Base64;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
public class SO {
public static PublicKey getPublicKeyFromString(String key) throws IOException, GeneralSecurityException {
String publicKeyPEM = key;
publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = publicKeyPEM.replace("-----END PUBLIC KEY-----", "");
byte[] encoded = Base64.decode(publicKeyPEM);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(new X509EncodedKeySpec(encoded));
}
}
これは私がメソッドを呼び出す方法です:
SO.getPublicKeyFromString(
"-----BEGIN PUBLIC KEY-----\n" +
"MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEXMHnQfWiM4oCaLfx296llgz7iaVv\n" +
"avMPppkzVNZAxtlNLhFlXnNWD0Mw9yzP8/Go\n" +
"-----END PUBLIC KEY-----"
);
誰もが私が間違ってやっている知っていますか?
はい、RSA公開鍵ではなく、楕円曲線(P192)の公開鍵です。 –
[JavaからOpenSSLで生成されたECDSA鍵を読み取ることができません:InvalidKeySpecException](https://stackoverflow.com/q/42234685/608639)、[spicyy castleを使用してビットコイン曲線(secp256k1)用のECDSA鍵ペア(256bit)を作成する方法?](https://stackoverflow.com/q/29778852/608639)、[PEMでエンコードされた楕円曲線の公開鍵をBouncy Castleにロードする方法](https://stackoverflow.com/q/40434317/608639)、[ EC公開鍵バイトからPublicKeyオブジェクトを取得するにはどうすればよいですか?](https://stackoverflow.com/q/26159149/608639)、[楕円曲線PEMでエンコードされた秘密鍵をロードするにはどうすればいいですか?](https:// stackoverflow .com/q/41927859/608639)など – jww