如何从我们创建的密钥库中检索我的公钥和私钥

扎克·埃夫

我的任务如下:

  • 从我创建的密钥库中检索我的公钥和私钥。
  • 使用这些密钥通过我的RSA 2048位公共密钥对段落进行加密。
  • 使用DSA-SHA-1签名算法对结果进行数字签名。
  • 将数字签名输出保存到名为的文件中output.dat

下面的程序抛出错误:“ java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.provider.DSAPublicKeyImpl”。

import java.security.*;
import java.security.KeyStore.*;
import java.io.*;
import java.security.PublicKey;
import java.security.PrivateKey;
import javax.crypto.Cipher;
import java.nio.charset.*;
import sun.security.provider.*;
import  javax.crypto.*;

public class Code {

/**
 * @param args the command line arguments
 */
    public static void main(String[] args) {

        try {

            /* getting data for keystore */

            File file = new File(System.getProperty("user.home") + File.separatorChar + ".keystore");
            FileInputStream is = new FileInputStream(file);
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());

            /*Information for certificate to be generated */ 
            String password = "abcde";
            String alias = "mykeys";
            String alias1 = "skeys";

            String filepath ="C:\\email.txt";

            /* getting the key*/
            keystore.load(is, password.toCharArray());
            PrivateKey key = (PrivateKey)keystore.getKey(alias, "bemylife".toCharArray());
            //PrivateKey key = cert1.getPrivateKey();
            //PublicKey key1= (PrivateKey)key;

            /* Get certificate of public key */
            java.security.cert.Certificate cert = keystore.getCertificate(alias); 

            /* Here it prints the public key*/
            System.out.println("Public Key:");
            System.out.println(cert.getPublicKey());

            /* Here it prints the private key*/
            System.out.println("\nPrivate Key:");
            System.out.println(key);

            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE,cert.getPublicKey());

            String cleartextFile = "C:\\email.txt";
            String ciphertextFile = "D:\\ciphertextRSA.png";

            FileInputStream fis = new FileInputStream(cleartextFile);
            FileOutputStream fos = new FileOutputStream(ciphertextFile);
            CipherOutputStream cos = new CipherOutputStream(fos, cipher);

            byte[] block = new byte[32];
            int i;
            while ((i = fis.read(block)) != -1) {
                cos.write(block, 0, i);
            }
            cos.close();


            /* computing the signature*/
            Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
            dsa.initSign(key);
            FileInputStream f = new FileInputStream(ciphertextFile);
            BufferedInputStream in = new BufferedInputStream(f);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) >= 0) {
               dsa.update(buffer, 0, len);
           };
           in.close();

           /* Here it prints the signature*/
           System.out.println("Digital Signature :");
           System.out.println( dsa.sign());

           /* Now Exporting Certificate */
           System.out.println("Exporting Certificate. ");
           byte[] buffer_out = cert.getEncoded();
           FileOutputStream os = new FileOutputStream(new File("d:\\signedcetificate.cer"));
           os.write(buffer_out);
           os.close();

           /* writing signature to output.dat file */
           byte[] buffer_out1 = dsa.sign();
           FileOutputStream os1 = new FileOutputStream(new File("d:\\output.dat"));
           os1.write(buffer_out1);
           os1.close();

       } catch (Exception e) {System.out.println(e);}

   }
}
德鲁尼克斯

问题在于DSA密钥不适合RSA加密。您需要一个RSA密钥进行加密,也许您可​​以将签名算法切换为RSA / SHA1,以避免需要两个密钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从SSH私钥中检索公钥?

来自分类Dev

如何从SSH私钥中检索公钥?

来自分类Dev

我如何知道RSA算法中的公钥和私钥是什么?

来自分类Dev

从比特币私钥中检索公钥

来自分类Dev

我们如何从表中检索链接列表

来自分类Dev

我们如何在步骤定义中检索/获取特征和场景标题?

来自分类Dev

我们可以将在应用程序范围之外创建的任何公钥分配给程序集吗?

来自分类Dev

Python:根据原始字节表示的私钥和公钥创建ECC密钥

来自分类Dev

IT安全中公钥和私钥的基础

来自分类Dev

我们如何在svn和ClearCase中检出先前版本的特定代码库(或数据)

来自分类Dev

我们如何在Liferay中创建后退按钮

来自分类Dev

我们如何在 React 中创建动态元素

来自分类Dev

我们如何在 awk 中创建数组?

来自分类Dev

我们如何在 LogDNA 中创建变量?

来自分类Dev

为什么我们需要创建、打开和关闭数据库连接来检索多个结果集,但如果检索一组则不需要?

来自分类Dev

Javascript Forge加密库:重新创建公钥和私钥以供以后重用

来自分类Dev

公钥/私钥加密如何工作,由谁生成密钥对?

来自分类Dev

我们应该如何在Function App中使用Azure密钥库?

来自分类Dev

我们可以从Google Iot Core获取与设备关联的RSA公钥吗

来自分类Dev

我无法使用公钥和私钥从Jenkins节点SSH到远程服务器

来自分类Dev

为什么我们需要在创建 azure 密钥保管库之前在 azure 活动目录中创建应用程序?

来自分类Dev

根据我们从数据库中检索到的数字显示评分栏

来自分类Dev

如何为数字签名创建有效的公钥和私钥?

来自分类Dev

RSA私钥和公钥

来自分类Dev

私钥和公钥扩展

来自分类Dev

我的React开发应用程序中公钥/私钥的正确位置?

来自分类Dev

证明我拥有与公钥关联的私钥

来自分类Dev

我们如何在TreeMap中使用异构密钥

来自分类Dev

Google Cloud 和 WinSCP 中的公钥和私钥

Related 相关文章

  1. 1

    如何从SSH私钥中检索公钥?

  2. 2

    如何从SSH私钥中检索公钥?

  3. 3

    我如何知道RSA算法中的公钥和私钥是什么?

  4. 4

    从比特币私钥中检索公钥

  5. 5

    我们如何从表中检索链接列表

  6. 6

    我们如何在步骤定义中检索/获取特征和场景标题?

  7. 7

    我们可以将在应用程序范围之外创建的任何公钥分配给程序集吗?

  8. 8

    Python:根据原始字节表示的私钥和公钥创建ECC密钥

  9. 9

    IT安全中公钥和私钥的基础

  10. 10

    我们如何在svn和ClearCase中检出先前版本的特定代码库(或数据)

  11. 11

    我们如何在Liferay中创建后退按钮

  12. 12

    我们如何在 React 中创建动态元素

  13. 13

    我们如何在 awk 中创建数组?

  14. 14

    我们如何在 LogDNA 中创建变量?

  15. 15

    为什么我们需要创建、打开和关闭数据库连接来检索多个结果集,但如果检索一组则不需要?

  16. 16

    Javascript Forge加密库:重新创建公钥和私钥以供以后重用

  17. 17

    公钥/私钥加密如何工作,由谁生成密钥对?

  18. 18

    我们应该如何在Function App中使用Azure密钥库?

  19. 19

    我们可以从Google Iot Core获取与设备关联的RSA公钥吗

  20. 20

    我无法使用公钥和私钥从Jenkins节点SSH到远程服务器

  21. 21

    为什么我们需要在创建 azure 密钥保管库之前在 azure 活动目录中创建应用程序?

  22. 22

    根据我们从数据库中检索到的数字显示评分栏

  23. 23

    如何为数字签名创建有效的公钥和私钥?

  24. 24

    RSA私钥和公钥

  25. 25

    私钥和公钥扩展

  26. 26

    我的React开发应用程序中公钥/私钥的正确位置?

  27. 27

    证明我拥有与公钥关联的私钥

  28. 28

    我们如何在TreeMap中使用异构密钥

  29. 29

    Google Cloud 和 WinSCP 中的公钥和私钥

热门标签

归档