如何在java的非对称加密中生成密钥对?

如何在java的非对称加密中生成密钥对?,java,public-key-encryption,encryption-asymmetric,Java,Public Key Encryption,Encryption Asymmetric,我试图在Java中的非对称加密中生成密钥对,但我得到了一个无效密钥异常错误,它说没有安装的提供程序支持此密钥:sun.security.rsa.RSAPrivateCrtKeyImpl 私有静态字节[]加密(字节[]inpBytes,私有密钥prvk, 字符串转换)引发异常{ Cipher Cipher=Cipher.getInstance(xform); cipher.init(cipher.ENCRYPT_模式,prvk); 返回cipher.doFinal(inpBytes); } @凌驾

我试图在Java中的非对称加密中生成密钥对,但我得到了一个
无效密钥异常
错误,它说
没有安装的提供程序支持此密钥:sun.security.rsa.RSAPrivateCrtKeyImpl

私有静态字节[]加密(字节[]inpBytes,私有密钥prvk,
字符串转换)引发异常{
Cipher Cipher=Cipher.getInstance(xform);
cipher.init(cipher.ENCRYPT_模式,prvk);
返回cipher.doFinal(inpBytes);
}
@凌驾
公共字节[]上传文件(字节[]数据、字符串名称、字符串文件、整数大小)
抛出远程异常{
//TODO自动生成的方法存根
字节[]keys=null;
试一试{
输出流输出=
新文件输出流(新文件(“C:\\Users\\Amaresh\\Documents\\Cloud\\”
+名称+“\\”+文件);
字符串xform=“DES/CTR/NoPadding”;
KeyPairGenerator kpg=KeyPairGenerator.getInstance(“RSA”);//原始
kpg.initialize(1024);//512是密钥大小//尝试1024 biit
KeyPair kp=kpg.genKeyPair();
PublicKey pubk=kp.getPublic();
PrivateKey prvk=kp.getPrivate();
keys=pubk.getEncoded();
字节[]encBytes=加密(数据、prvk、xform);
System.out.println(“生成的密钥对”);
out.write(encBytes,0,encBytes.length);
out.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(无算法异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(无此提供异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回键;
}

我只想做非对称加密,我用私钥加密数据并存储公钥来解密它。我是一个初学者,我为我的直截了当的错误感到抱歉。

DES密码不支持RSA密钥。DES是一种对称密码算法,而RSA是不对称的。对称密码要求使用相同的密钥进行加密和解密,而非对称密码使用公钥/私钥对

您有两个选项可以让加密工作:

  • 您可以使用当前的对称密码并创建对称密钥(可能使用)

  • 您可以将密码实例更改为非对称实例,如
    “RSA”

  • 注:
    您试图做的不是加密,而是签名,因为加密将使用公钥完成。

    此外,您不应通过非对称模式加密完整文件,而应仅使用对称密钥加密和解密数据。请参阅。

    DES密码不支持RSA密钥。DES是一种对称密码算法,而RSA是不对称的。对称密码要求使用相同的密钥进行加密和解密,而非对称密码使用公钥/私钥对

    您有两个选项可以让加密工作:

  • 您可以使用当前的对称密码并创建对称密钥(可能使用)

  • 您可以将密码实例更改为非对称实例,如
    “RSA”

  • 注:
    您试图做的不是加密,而是签名,因为加密将使用公钥完成。

    此外,您不应通过非对称模式加密完整文件,而应仅使用对称密钥加密和解密数据。请参阅。

    您正在正确生成密钥

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(1024);
    KeyPair keys = kpg.generateKeyPair();
    
    问题在于:

    byte[] encBytes = encrypt(data, prvk, xform);
    

    很可能是因为您正在传递字符串“DES/CTR/NoPadding”。您无法使用带有RSA密钥对的DES进行加密。

    您正在正确生成密钥

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(1024);
    KeyPair keys = kpg.generateKeyPair();
    
    问题在于:

    byte[] encBytes = encrypt(data, prvk, xform);
    

    很可能是因为您正在传递字符串“DES/CTR/NoPadding”。无法使用带有RSA密钥对的DES进行加密。

    我不太确定,但可能需要安装无限密钥强度策略:。请注意,此代码不仅生成公钥/私钥,还一次性加密文件。这将导致每个加密文件都有一个私钥/公钥对,我无法想象这是您真正想要的。我不太确定,但可能您需要安装无限密钥强度策略:。请注意,此代码不仅生成公钥/私钥,还一次性加密文件。这将导致每个加密文件都有一对私钥/公钥,我无法想象这是您真正想要的。谢谢。我纠正了它,我意识到我有多傻。谢谢。我纠正了它,我意识到我有多傻。