2011-12-08 97 views
1

我目前正在嘗試使用ECDH和BouncyCastle爲Android開發加密應用程序。到目前爲止,我已經實現的是根據下面的代碼在應用程序上生成公鑰和私鑰。通過短信發送公鑰

我的下一個任務是通過SMS發送公鑰。我想知道哪些方法可以用來完成工作。目前我試圖通過將生成的鍵分配給一個字符串,然後我發送字符串,但我仍然無法讓它正常工作。

任何援助將不勝感激

感謝和節日快樂!

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(); 
+0

什麼不是特別工作?你有錯誤嗎?你看過http://stackoverflow.com/a/4967508/984393嗎? – Craigy

回答

1

我設法弄清楚我做錯了什麼。

我是從

Presets.myPublicKey = aKeyPair.getPublic().getEncoded().toString(); 

得到的輸出是沿着無法通過SMS像我希望的被髮送[@ B1ef9157線的東西。

Java: Syntax and meaning behind "[[email protected]"? Binary/Address?

相反,我這樣做

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

利用中的Base64編碼的自http://iharder.sourceforge.net/current/java/base64/

,現在我能夠成功地發送了串過短信。

Thanks Craigy!

+0

那你爲什麼不[接受你自己的回答](http://meta.stackexchange.com/a/5235)呢? – martijno