通过短信发送公钥

时间:2011-12-08 19:42:29

标签: android bouncycastle elliptic-curve

我目前正在尝试使用ECDH和BouncyCastle为Android开发加密应用。到目前为止,我已经实现了根据下面的代码在应用程序上生成公钥和私钥。

我的下一个任务是通过短信发送公钥。我想找出可以用什么方法来完成工作。目前我正在尝试将生成的密钥分配给字符串,然后我将字符串发送出去,但我仍然无法让它正常工作。

非常感谢任何帮助

谢谢,节日快乐!

    try
    {
        KeyPairGenerator    g = KeyPairGenerator.getInstance("ECDH", "SC");

        //Define the Elliptic Curve Field, Points A and B
        EllipticCurve curve = new EllipticCurve(new ECFieldFp(Presets.CurveQ),Presets.PointA,Presets.PointB);

        //Define the points on the Elliptic Curve
        ECParameterSpec ecSpec = new ECParameterSpec(
                curve,
                ECPointUtil.decodePoint(curve, Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G
                new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307"), // n
                1); // h

        //Generate the random point on the Elliptic Curve
        g.initialize(ecSpec, new SecureRandom());

        //Generate Private Key for User A
        KeyPair aKeyPair = g.generateKeyPair();
        aKeyAgree = KeyAgreement.getInstance("ECDH", "SC");
        aKeyAgree.init(aKeyPair.getPrivate());

        //Save Personal Keys            
        Presets.myPrivateKey = aKeyPair.getPrivate().getEncoded().toString();
        Presets.myPublicKey = aKeyPair.getPublic().getEncoded().toString();

1 个答案:

答案 0 :(得分:1)

我设法弄清楚我做错了什么。

我从

得到的输出
Presets.myPublicKey = aKeyPair.getPublic().getEncoded().toString();

与[@ B1ef9157]的内容类似,不能像我希望的那样通过短信发送。

Java: Syntax and meaning behind "[B@1ef9157"? Binary/Address?

相反,我做了这个

byte[] pubEnc = aKeyPair.getPublic().getEncoded();
String s = Base64.encodeBytes(pubEnc);

使用http://iharder.sourceforge.net/current/java/base64/

中的Base64编码器

现在我能够通过短信成功发送字符串。

谢谢Craigy!