我需要在字符串和组中的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==
我不知道为什么原始字符串和解码后的原因不同......
任何人都可以知道这个问题或给我一些建议吗?
答案 0 :(得分:0)
您可能会对您尝试使用的加密原语混淆Base64编码方法。在第一个代码示例中,您尝试对Element.toString生成的字符串进行Base64解码,然后在第二个代码示例中尝试对您的测试字符串进行Base64解码。这两个字符串都不是以base64编码开头的,所以这很可能会失败。
如果您尝试加密数据,我认为您应该寻找比您正在使用的API更高级别的API。低级加密原语非常容易以不安全的方式使用,即使您确实获得了有效的解密并且它似乎也能正常工作。