我正在用Java創建一個加密安全的IM應用程序。第一步(建立連接之後)是交換一個公鑰(RSA-4096),以便另一方可以創建一個對稱密鑰(AES-256),使用對方的公鑰進行加密,通過連接發送,原始方可以用他們的私鑰解密對稱密鑰,然後雙方可以交換使用256位密鑰加密的消息。Java - KeyPairGenerator.Initialize(int,SecureRandom)NullPointerException
我的問題是出在初始化KeyPairGenerator
了,每次我打電話kpg.initialize(4096,sr)
其中kpg
是KeyPairGenerator
的變量的名稱,並sr
是我所創建的SecureRandom
,程序崩潰並返回一個NullPointerException,這裏是全代碼:
CryptoBox.java:
package crypto;
import java.security.*;
public class CryptoBox {
private static SecureRandom sr = new SecureRandom();
private static KeyPairGenerator kpg;
private static KeyPair kp;
private static Key PubKey;
private static Key PrivKey;
@SuppressWarnings("static-access")
public void init(int keySize){
try {
sr.getInstance("SHA1PRNG");
kpg.getInstance("RSA");
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
kpg.initialize(keySize,sr); // <-- NullPointerException
}catch(Exception e){
e.printStackTrace();
return;
}
kp = kpg.genKeyPair();
PubKey = kp.getPublic();
PrivKey = kp.getPrivate();
}
}
Main.java:
package main;
import crypto.CryptoBox;
public class Main {
/**
* @param args
*/
public static void main(String[] args){
// TODO Auto-generated method stub
CryptoBox cb = new CryptoBox();
cb.init(4096); // <-- NullPointerException
}
}
完整的錯誤信息是:
java.lang.NullPointerException
at crypto.CryptoBox.init(CryptoBox.java:23)
at main.Main.main(Main.java:15)
我剛剛編輯了我的代碼,它現在可以工作。感謝Mene,Reimeus和Pshemo。現在我只需要讓編碼的其餘部分得到! – 2012-08-01 23:24:35