java - 如何使用 JPBC 解密字符串

标签 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);

然后编译显示:

Bad Base64 input character decimal 123 in array position 0 (error 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==

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

谁能知道问题所在或给我一些建议吗?

最佳答案

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

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

关于java - 如何使用 JPBC 解密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982052/

相关文章:

java - 单击按钮红点应该闪烁

java - 下载的项目中eclipse中的/src文件夹为空

java - 当重载相同的方法 display(String s ) 和 display(Object o) 时,当从 main 方法的方法中传递 null 时,为什么调用 display(String s )?

java - Lombok @Wither、@Value、@NoArgsConstructor、@AllArgsConstructor 不能一起工作

java String - 字符串索引超出范围,charAt

java - 以编程方式更改 Eclipse 中的文件关联

具有动态创建的数据成员的 Java 对象

java - IntelliJ IDEA 12 重复类 R.java 和 BuildConfig.java

java - NotSerializableException,不可预测?

java - 在React Native中检查通话是否成功