【Android】查看keystore的公钥和私钥

前言:

        查看前准备好.keystore文件,安装并配置openssl、keytool。文件路径中不要有中文。

一、查看keystore的公钥:

1.从keystore中获取MD5证书

keytool -list -v -keystore gamekeyold.keystore

2.导出公钥文件

keytool -export -alias "别名" -file gamekeyold.cer -keystore gamekeyold.keystore

  输入完成后回车,会提示输入一次密码,输入密码后回车,就能生成cer文件了。

3.转换成pem证书

openssl x509 -inform der -in gamekeyold.cer -out gamekeyold.pem

4.查看公钥

keytool -list -rfc --keystore gamekeyold.keystore | openssl x509 -inform pem -pubkey

输入指令,回车后输入密码,再回车,即可看到公钥信息。

-----BEGIN PUBLIC KEY-----
这里就是公钥了。
-----END PUBLIC KEY-----

二、查看keystore的私钥:

1.keystore转换为JKS

keytool -importkeystore -srckeystore gamekeyold.keystore -destkeystore gamekeyold.jks -deststoretype pkcs12

2.JKS转换为PKCS12格式

keytool -importkeystore -srckeystore gamekeyold.jks -destkeystore gamekeyold.pkcs  -srcstoretype JKS -deststoretype PKCS12
//或者:
keytool -importkeystore -srckeystore gamekeyold.jks -destkeystore gamekeyold.p12  -srcstoretype JKS -deststoretype PKCS12

  输入完成后回车,会提示输入一次密码,输入密码后回车,就能生成cer文件了。

3.PKCS12格式转为pem(这步可以不要)

openssl pkcs12 -in gamekeyold.p12 -out gamekeyoldprivate.pem

4.生成私钥pem文件

openssl pkcs12 -in gamekeyold.p12 -nodes -nocerts -out gamekeyold_private_key.pem

生成的私钥pem文件,用记事本打开即可看到私钥。

三、校验公钥私钥是否匹配

        在线校验工具

        将获得的公钥私钥复制进去即可进行校验。

四、参考

       【Android】从Keystore中查看公钥和MD5                

        生成keystore以及导出keystore公钥,私钥信息

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,您需要生成RSA公钥私钥。可以使用Java中的`KeyPairGenerator`类来生成公钥私钥。以下是一个示例代码: ```java import java.security.*; public class RSAKeyGenerator { public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); System.out.println("Private Key: " + privateKey); System.out.println("Public Key: " + publicKey); } } ``` 生成的公钥私钥将打印在控制台上。 接下来,您需要将公钥私钥保存到文件中。可以使用Java中的`KeyStore`类来保存公钥私钥。以下是一个示例代码: ```java import java.io.FileOutputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.Certificate; public class RSAKeyStore { public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(null, null); keyStore.setKeyEntry("mykey", privateKey, "mypass".toCharArray(), new Certificate[] { }); keyStore.setCertificateEntry("mycert", new TestCertificate(publicKey)); FileOutputStream fos = new FileOutputStream("mykeystore.jks"); keyStore.store(fos, "mystorepass".toCharArray()); fos.close(); } } class TestCertificate extends Certificate { private PublicKey publicKey; public TestCertificate(PublicKey publicKey) { super("X.509"); this.publicKey = publicKey; } @Override public PublicKey getPublicKey() { return publicKey; } @Override public byte[] getEncoded() { return new byte[0]; } @Override public void verify(PublicKey key) { } @Override public void verify(PublicKey key, String sigProvider) { } @Override public String toString() { return "TestCertificate"; } } ``` 这个示例代码将生成一个Java密钥库,并将私钥公钥保存为键值对。然后将密钥库保存到文件中。 现在,您可以使用公钥加密文件,然后使用私钥解密文件。以下是示例代码: ```java import javax.crypto.Cipher; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.*; public class RSAEncryption { public static void main(String[] args) throws Exception { // 读取密钥库文件 String keyStoreFile = "mykeystore.jks"; String keyStorePass = "mystorepass"; String keyAlias = "mykey"; String keyPass = "mypass"; KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(new FileInputStream(keyStoreFile), keyStorePass.toCharArray()); // 获取私钥 PrivateKey privateKey = (PrivateKey) keyStore.getKey(keyAlias, keyPass.toCharArray()); // 加密文件 String inputFile = "plaintext.txt"; String encryptedFile = "encrypted.txt"; Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, keyStore.getCertificate("mycert").getPublicKey()); FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(encryptedFile); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { byte[] encrypted = cipher.update(buffer, 0, len); if (encrypted != null) { fos.write(encrypted); } } byte[] encrypted = cipher.doFinal(); if (encrypted != null) { fos.write(encrypted); } fis.close(); fos.flush(); fos.close(); // 解密文件 String decryptedFile = "decrypted.txt"; cipher.init(Cipher.DECRYPT_MODE, privateKey); fis = new FileInputStream(encryptedFile); fos = new FileOutputStream(decryptedFile); buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) { byte[] decrypted = cipher.update(buffer, 0, len); if (decrypted != null) { fos.write(decrypted); } } byte[] decrypted = cipher.doFinal(); if (decrypted != null) { fos.write(decrypted); } fis.close(); fos.flush(); fos.close(); } } ``` 这个示例代码将使用公钥加密`plaintext.txt`文件,并将加密后的文件保存为`encrypted.txt`。然后,使用私钥解密`encrypted.txt`文件,并将解密后的文件保存为`decrypted.txt`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值