且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

生成公钥/私钥之前RSA加密forceclosing

更新时间:2022-10-17 21:52:33

我不知道是什么导致你的问题(我们不得不看到你使用这个类来调试),但我有一个替代你,如果你可以包括第三方库。请参见 JSch ,它可以生成密钥对RSA(例如在SSH公钥认证使用)。文档: http://epaul.github.com/jsch-documentation/simple.javadoc/

您正在寻找的方法是密钥对。 genKeyPair 。

I am trying to generate my first public/private key pair for an RSA encryption. This is my first time doing so but through looking at various tutorials and website i've decided to do so with the following code. Although my code does not give me errors, it force closes. Everything is posted including my imports, can sombody please help me understand why my code is not generating keys and giving me errors? And yes i did declare it in the AndroidManifest.xml file

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>

I don't know what's causing your problem (we'd have to see where you use this class to debug that), but I do have an alternative for you, if you can include a 3rd party library. See JSch, which can generate RSA keypairs (e.g. for use in SSH public-key authentication). Documentation: http://epaul.github.com/jsch-documentation/simple.javadoc/

The method you're looking for is KeyPair.genKeyPair.