2012-03-24 203 views
3

我正在嘗試爲RSA加密生成我的第一個公鑰/私鑰對。這是我第一次這樣做,但通過查看各種教程和網站,我決定使用下面的代碼。雖然我的代碼不會給我錯誤,但它強制關閉。一切都張貼包括我的進口,可以sombody請幫我理解爲什麼我的代碼不生成鍵和給我的錯誤?是的,我沒有宣佈它在AndroidManifest.xml文件在生成公鑰/私鑰之前關閉RSA加密force

import java.io.BufferedOutputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectOutputStream; 
import java.math.BigInteger; 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.spec.RSAPrivateKeySpec; 
import java.security.spec.RSAPublicKeySpec; 

    public class RSA { 
     public static void GenerateKeyPair() { 
      try { 
       KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
       kpg.initialize(4096); 
       KeyPair kp = kpg.genKeyPair(); 

       KeyFactory fact = KeyFactory.getInstance("RSA"); 
       RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(), 
         RSAPublicKeySpec.class); 
       RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(), 
         RSAPrivateKeySpec.class); 

       saveToFile("public.key", pub.getModulus(), pub.getPublicExponent()); 
       saveToFile("private.key", priv.getModulus(), 
         priv.getPrivateExponent()); 
      } catch (Exception e) { 
       System.out.println(e.getMessage()); 
      } 
     } 

     public static void saveToFile(String fileName, BigInteger mod, 
       BigInteger exp) throws Exception { 
      ObjectOutputStream oout = new ObjectOutputStream(
        new BufferedOutputStream(new FileOutputStream(fileName))); 
      try { 
       oout.writeObject(mod); 
       oout.writeObject(exp); 
      } catch (Exception e) { 
       throw new Exception("error", e); 
      } finally { 
       oout.close(); 
      } 
     } 
    } 


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.BLAH" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="7" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".UUIDActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".Installation" 
      android:label="@string/app_name" > 
     </activity> 
     <activity 
      android:name=".RSA" 
      android:label="@string/app_name" > 
     </activity> 
    </application> 

</manifest> 
+0

@Obliviator只有我檢查你的問題是,你說「是的,我確實在聲明中聲明」,這意味着你有沒有聲明這個類在清單中不擴展爲Activity然後,它肯定會給你錯誤你可以在Last.So上發佈你的清單文件代碼,並且可能是你的Activity類的地方。 – Herry 2012-03-24 06:20:19

+0

我張貼清單 – 2012-03-24 15:34:43

回答

0

@The Obliviator當我看到你的AndroidManifest時,我發現你應該從你的清單中刪除下面的代碼。

<activity 
     android:name=".RSA" 
     android:label="@string/app_name" > 
    </activity> 

因爲此類不作爲擴展活動,你需要這個類GenerateKeyPair所以沒有必要宣佈這一類清單file.And什麼關於這個類的安裝,是這個類也不像以前那樣活動再延長刪除它也是。然後你會成功運行。