据我所知,两者是相同的,但是其中一台可以在同一台PC上工作,而相同的代码则表示:
javax.crypto.NoSuchPaddingException:OAEPWITHSHA-256ANDMGF1PADDING在另一台计算机上的RSA不可用。
当我从名称(-
)中删除破折号OAEPWITHSHA256ANDMGF1PADDING
时,它开始在另一台计算机上运行,但将错误引至其他行错误的填充异常。
可能是什么原因?
提示的示例代码
我正在使用jdk1.7.0_71 32bit
:
private byte[] decryptSecretKeyData(byte[] encryptedSecretKey, byte[] iv, PrivateKey privateKey) throws Exception
{
try {
Provider provider= new sun.security.pkcs11.SunPKCS11(keyStoreFile1);
Security.addProvider(provider);
LOG.info("**************Inside decryptSecretKeyData***********************");
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING", provider);
// decrypting the session key with rsa no padding.
rsaCipher.init(Cipher.DECRYPT_MODE, privateKey);
/* The reason is RSA OAEP SHA256 is not supported in HSM. */
byte[] decKey = rsaCipher.doFinal(encryptedSecretKey);
OAEPEncoding encode = new OAEPEncoding(new RSAEngine(), new SHA256Digest(), iv);
LOG.info("******************RSAPublicKey rsaPublickey = (*****************************");
java.security.interfaces.RSAPublicKey rsaPublickey = (java.security.interfaces.RSAPublicKey) publicKeyFile;
RSAKeyParameters keyParams = new RSAKeyParameters(false, rsaPublickey.getModulus(), EXPONENT);
encode.init(false, keyParams);
LOG.info("******************encode.processBlock(decKey, 0, decKey.length);************************");
byte decryptedSecKey[] = encode.processBlock(decKey, 0, decKey.length);
return decryptedSecKey;
} catch (InvalidCipherTextException e) {
LOG.info("*******************Failed to decrypt AES secret key using RSA :**********************");
throw new Exception("Failed to decrypt AES secret key using RSA :" + e.toString());
}
}
最佳答案
RSA/ECB/OAEPWITHSHA256ANDMGF1PADDING
和RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING
是不同的别名,但是都引用相同的算法,因此从这个意义上说,根本没有区别。
事实是,您正在使用PKCS#11
(加密令牌接口)对数据进行加密。根据java PKCS#11
reference:
与大多数其他提供程序相比,Sun PKCS#11提供程序本身并未实现加密算法。
相反,它充当Java JCA和JCE API与
本地PKCS#11加密API,可转换调用和
两者之间的约定。这意味着Java应用程序调用
标准的JCA和JCE API可以不加修改地利用
基础PKCS#11实现提供的算法,例如,
例如,
加密智能卡,硬件加密加速器和
高性能软件实现。请注意,仅Java SE
有助于访问本机PKCS#11实现,但不支持
本身包括一个本地PKCS#11实现。但是,密码学
智能卡和硬件加速器等设备通常随附
包含PKCS#11实现的软件,您需要
根据制造商的说明进行安装和配置。
总之,如果您使用的是PKCS#11
,则算法的使用取决于供应商的本机实现(在Windows上是.dll
,在Linux上是.so
...),有时还要在特定的程序连接器上使用:您使用PKCS#11
令牌使用相同驱动程序/程序版本的两台PC,并且两台PC均已正确安装,因为其中一台计算机可能存在错误,导致您无法正确使用RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING
。
希望这可以帮助,
关于java - “RSA/ECB/OAEPWITHSHA256ANDMGF1PADDING”和“RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING”之间的区别是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28190858/