如何解密字符串使用JPBC

时间:2017-12-26 17:56:59

标签: java

我需要在字符串和组中的GT(e(g,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);

然后编译显示:

  

数组位置0中的Bad Base64输入字符十进制123(错误   line:byte [] s3 = Base64.decode(g.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==

我不知道为什么原始字符串和解码后的原因不同......

任何人都可以知道这个问题或给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

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

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