我目前正致力于使用RSA进行非对称加密的工具:
PublicKey FrKey;
public byte[] encrypt(String msg) {
byte[] msg1 = null;
Cipher cp = Cipher.getInstance("RSA");
cp.init(Cipher.ENCRYPT_MODE, FrKey);
msg1 = cp.doFinal(msg.getBytes());
return msg1;
}
public void setOpKey(String s) {
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(s.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(pubKeySpec);
System.out.println("Friends Public: "+s+"\n\n"+publicKey);
}
虽然设置对手公钥的setOpKey函数似乎工作得很好,但是当加密类运行时,java会返回错误:
java.security.InvalidKeyException:没有安装的提供程序支持此密钥:(null)
从这个错误你会读到,Key将为null,但是如下面的控制台输出所示,它不是。
Friends Public:我输入的 / String,由RSA生成 /
Sun RSA公钥,1024位
模数: /非常长的数字 /
公众指数:65537
这似乎是公钥的错误,但我不知道如何解决这个问题。任何帮助将不胜感激。
PS:我删除了所有try / catch子句,使代码更具可读性。