当前位置: 首页 > 知识库问答 >
问题:

McEliece(Bouncy Castle)拿回了公钥

融伯寅
2023-03-14

我目前正在尝试使用BC实现McEliece加密,但遇到了一些麻烦。我目前有能力创建密钥并将它们放入一个文件,我可以将它们读回程序中,但不能使它从字节返回到公钥。

以下是我目前拥有的:

        public static String EncryptText(Component tmp, String Plaintext) throws InvalidKeyException, InvalidCipherTextException {
    String CipherText = "Didnt Work";
    try {
        // The message to encrypt.
        byte[] messageBytes = Plaintext.getBytes();

        //read in the Public Key to use to Encrypt.
        File f = new File(tmp.getPublicKey());
        FileInputStream fis = new FileInputStream(f);
        byte[] PubKeybytes = new byte[fis.available()];
        fis.read(PubKeybytes);
        fis.close();


        //turn the bytes into the Key.
        X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(PubKeybytes);
        SubjectPublicKeyInfo PKI ;
        KeyFactory KF = null;
        try {
          KF =  KeyFactory.getInstance("McEliece");
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex);
        }
        PublicKey PK = null;
        try {
            PK = KF.generatePublic(pubKeySpec);
        } catch (InvalidKeySpecException ex) {
            Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Public Key
        PublicKey aPublic = PK;
        McEliecePublicKeyParameters GPKP = (McEliecePublicKeyParameters) McElieceKeysToParams.generatePublicKeyParameter(aPublic);

        //set the public key to use.
        McElieceCipher EnCipheredText = new McElieceCipher();
        EnCipheredText.init(true, GPKP);
        EnCipheredText.initCipherEncrypt(GPKP);

        byte[] ciphertextBytes;

        //sign the message with the public key.
        ciphertextBytes = EnCipheredText.messageEncrypt(messageBytes);
        CipherText = new String(ciphertextBytes);
        return CipherText;
    } catch (IOException ex) {
        Logger.getLogger(McEliecePKCS.class.getName()).log(Level.SEVERE, null, ex);
    }
    return CipherText;
}\

感谢您提前回复。

共有1个答案

白才捷
2023-03-14

设法解决了问题。我需要补充一句:

           Security.addProvider(new BouncyCastleProvider());
           Security.addProvider(new BouncyCastlePQCProvider());
 类似资料:
  • 我正在尝试在BouncyCastle中导入公共和私有ECDH密钥。为了导入公钥,我使用了下面的C#代码,代码运行良好: 公钥:042E3E5CCF6B9AB04BE7A22F3FACCDE73C87E87155394A34815408A896CA18A374DAC669AF36220FC863767F4AF47507C5BC221FC4A19874DAF39B074E3EB8 私钥:be3f9bf

  • 我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:

  • 我正在尝试使用BouncyCastle在运行mbedTLS和Java的嵌入式设备之间进行ECDH。当我比较生成的密钥长度时,我得到了由mbedTLS制作的66字节密钥和由BC制作的65字节密钥。附加伪代码: MbedTLS: 当我将MbedTLS密钥加载到Java中时,它会抛出java.lang.IllegalArgumentException:无效的点编码0x41: 我尝试在Java和MbedT

  • 在SSO的实现中,我使用了bouncycastle(JAVA)进行签名、加密、解密和签名的验证。我有原始PGP公钥和私钥,我需要将它们存储在Java Keystore中。这些PGP公钥没有证书。 我知道对于公钥(根据Keystore的javadoc:http://docs.oracle.com/javase/6/docs/api/java/security/keystore.html),我必须创建

  • 3.11 简历通过发面 3.19 一面 3.22 二面 3.28 三面 4.1 HR面 几天后提供了流水,流水要求提供的很细 4.17 发了正式offer 折腾了一个月终于有结果了,非常开心。 社招主要是问项目,只有一面和三面少量问了点八股。 从毕业一直想进字节,期待终于实现!#晒一晒我的offer#

  • 刚开始使用PGP,我正在尝试通过C#控制台应用程序加密一个文件。在我的研究中,似乎BouncyCastle是一个更受欢迎的应用。我找到了下面的文章,它看起来很好,除了我只有公钥。http://burnignorance.com/c-coding-tips/pgp-encryption-decryption-in-c/