RSA Java:私钥不能用于加密

RSA Java:私钥不能用于加密,java,encryption,Java,Encryption,我使用RSA算法对文件进行加密和解密。目前,我已经在本地计算机(Windows)上实现了该代码,并使用私钥对文件进行加密,使用公钥对文件进行解密,效果很好 但是,当我将应用程序部署到AIX机器时,同一种方法引发了一个异常: Private Key cannot be used to encrypt 然后,我在日志中检查了windows计算机上的java使用的是sun.security.rsa安全提供程序,AIX上的java使用的是com.ibm.crypto.provider 当我进一步上网时

我使用RSA算法对文件进行加密和解密。目前,我已经在本地计算机(Windows)上实现了该代码,并使用私钥对文件进行加密,使用公钥对文件进行解密,效果很好

但是,当我将应用程序部署到AIX机器时,同一种方法引发了一个异常:

Private Key cannot be used to encrypt
然后,我在日志中检查了windows计算机上的java使用的是
sun.security.rsa
安全提供程序,AIX上的java使用的是
com.ibm.crypto.provider

当我进一步上网时,我知道IBM不允许在RSA中使用私钥进行加密

现在的问题是,我确实必须为encrypton使用私钥,但它需要在我的AIX机器中安装或以某种方式嵌入新的安全提供程序,即
sun.security.rsa

我可以直接在现有代码中执行吗? 或者我可以使用ibm软件包使用私钥进行加密吗?
或者其他方式?请帮忙

我通过使用不同的JCE(即BouncyCastle)而不是IBM JCE解决了这个问题。

通常,加密时使用公钥,解密时使用私钥。如果你做相反的事情,任何获得公钥的人都可以解密你的文件…你是对的,但是消息的真实性也是必需的,因为私钥可以确保文件只被正确的实体加密!但是,您有什么建议来克服提供的问题吗?我很担心。那么你应该使用签名方法:你有你的消息,你用你的私钥创建一个签名你发送消息,签名第三方将能够根据你的公钥验证签名。如果需要加密邮件,可以使用第三方的公钥加密邮件。通常,对称密码用于使用将使用第三方公钥加密的密钥对消息进行加密,以便您需要发送加密的消息、签名和加密密钥。RSA不用于加密,某些小文件除外。可以与AES-GCM结合使用。这将为您提供保密性、完整性和相互认证。如果您想要使用RSA签名,请使用其他RSA密钥对并使用RSA-PSS签名。您忘记附加代码了。另外,重新实现安全算法的第一条规则是:不要。使用两种平台上都可用的openssl。编辑:猜测您使用的证书没有数据加密作为密钥使用。