簡體   English   中英

RSA加密在生成公鑰/私鑰之前強制關閉

[英]RSA Encryption forceclosing before generating public/private keys

我正在嘗試為RSA加密生成我的第一個公鑰/私鑰對。 這是我第一次這樣做,但通過查看各種教程和網站,我決定使用以下代碼。 雖然我的代碼沒有給我錯誤,但它強制關閉。 一切都貼出來,包括我的進口,可以sombody請幫助我理解為什么我的代碼沒有生成密鑰並給我錯誤? 是的,我確實在AndroidManifest.xml文件中聲明了它

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>

我不知道是什么導致了你的問題(我們必須看看你在哪里使用這個類進行調試),但如果你可以包含第三方庫,我確實可以為你提供替代方案。 請參閱JSch ,它可以生成RSA密鑰對(例如,用於SSH公鑰驗證)。 文檔: http//epaul.github.com/jsch-documentation/simple.javadoc/

您正在尋找的方法是KeyPair.genKeyPair

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

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

因為這個類沒有擴展為As Activity,所以你需要GenerateKeyPair這個類,所以不需要在Manifest文件中聲明這個類。那么這個類安裝怎么樣,這個類也不作為Activity擴展然后刪除它。之后你將成功運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM