我正在用 Java 创建一个加密安全的 IM 应用程序。第一步(建立连接后)是交换公钥(RSA-4096),以便对方可以创建对称密钥(AES-256),用对方的公钥加密,通过连接发送,原始方可以使用他们的私钥解密对称密钥,然后双方可以交换使用 256 位密钥加密的消息。
我的问题是在初始化时出现KeyPairGenerator
,每次我调用kpg.initialize(4096,sr)
wherekpg
是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();
}
}
主.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)