Java 如何使用JPBC解密字符串

Java 如何使用JPBC解密字符串,java,Java,我需要在组中的一个字符串和一个GT-eg,g^n类型的元素之间相乘。我首先将字符串转换为元素,然后在解密消息时遇到问题 以下是简单版本的代码: TypeACurveGenerator pg = new TypeACurveGenerator(160,512); //generate the parameters of the elliptic curve PairingParameters typeAParams = pg.generate(); //initia

我需要在组中的一个字符串和一个GT-eg,g^n类型的元素之间相乘。我首先将字符串转换为元素,然后在解密消息时遇到问题

以下是简单版本的代码:

    TypeACurveGenerator pg = new TypeACurveGenerator(160,512);
    //generate the parameters of the elliptic curve
    PairingParameters typeAParams = pg.generate();
    //initialize the pairing
    PairingFactory.getInstance().setUsePBCWhenPossible(true);
    Pairing p= PairingFactory.getPairing(typeAParams);

    String s="hahaha test";
    Element g = p.getGT().newElementFromBytes(Base64.encodeBytes(s.getBytes()).getBytes());
    byte[] s3 = Base64.decode(g.toString());
    System.out.println(s);
    System.out.println(g);
    System.out.println(s3);
然后,编译显示:

错误的Base64输入字符十进制123位于数组位置0错误 行:字节[]s3=Base64.decodeg.toString

我对这个结果感到困惑,我没有能力解决它

然后我尝试了另一种方法,但与原始字符串相比,它总是不同的

以下是我的代码的简单版本:

    TypeACurveGenerator pg = new TypeACurveGenerator(160,512);
    //generate the parameters of the elliptic curve
    PairingParameters typeAParams = pg.generate();
    //initialize the pairing
    PairingFactory.getInstance().setUsePBCWhenPossible(true);
    Pairing p= PairingFactory.getPairing(typeAParams);
    String s="hahaha test";
    Element g = p.getGT().newElementFromBytes(Base64.decode(s));
    String s3 = Base64.encodeBytes(g.toBytes());
    System.out.println(s);
    System.out.println(g);
    System.out.println(s3);
和编译显示

hahaha test
{x=146958119709534,y=0}
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFqFqFq14AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
我不知道为什么它是不同的原始字符串和解码后


有谁知道这个问题或给我一些建议吗?

您可能会混淆您似乎试图使用的加密原语的Base64编码方法。在第一个代码示例中,您尝试对Element.toString生成的字符串进行Base64解码,在第二个代码示例中,您尝试对测试字符串进行Base64解码。这两个字符串一开始都不是base64编码的,因此这很可能会失败


如果您正在尝试加密数据,我认为您应该寻找一个比您正在使用的API级别高得多的API。低级加密原语非常容易以不安全的方式使用,即使您得到了有效的解密,并且它似乎可以工作。

谢谢您的建议!似乎我有一个错误的概念,我认为Base64.encodeBytess.getBytes.getBytes是完整的Base64编码字符串。。。我想写我论文的工具,但我只是找到了JPBC图书馆。这也是我老师给我的建议。我想像CloudStack软件或云系统的安全工具包一样编写,第一次修改访问控制和加密/解密,但我发现这对我来说很难。所以我只写了一个简单的代码,比如模拟。总而言之,XD,你能给我一些关于高级API的关键词吗?谢谢你!在我看来,bouncycastle是一个标准且成熟的java加密库,提供纯java SSL。嗨,我和你面临着同样的问题,你找到了解决方案吗?谢谢添加私钥来加密消息XD,否则在解密时会遇到问题