所以Java有一个名为的模式RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING.那有什么意思?
RFC3447,公钥加密标准(PKCS)#1:RSA加密规范版本2.1,第7.1.2节解密操作说Hash和MGF都是RSAES-OAEP-DECRYPT的选项.MGF是它自己的功能,在B.2.1节MGF1中定义,并且它也有自己的Hash"选项".
也许RSAES-OAEP-DECRYPT和MGF1中的Hash"选项"应该是相同的,或者它们可能不是,我不清楚.如果它们是那么我RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING想当你有这意味着sha256应该用于两者.但是如果它们不应该是相同的那么你可以将sha256用于RSAES-OAEP-DECRYPT,例如,sha1用于MGF1.如果是这种情况那么sha256应该用于什么功能呢?什么哈希算法应该用于其他功能?
欧洲央行在这方面的意义是什么?ECB是对称分组密码模式.电子密码本.也许它应该是指Java如何处理比模数更大的明文?就像将明文拆分成与模数一样大的块,然后用RSA加密每个块并将它们连接在一起?我只是猜猜..
我在Oracle的Java标准加密提供程序中发现了困难的方法
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
Run Code Online (Sandbox Code Playgroud)
使用以SHA-1实例化的MFG1;SHA-256仅用于对标签进行哈希处理(实际上是空的)。我发现在MFG1中实际使用SHA-256的唯一解决方案(得到该答案和注释的帮助)是使用以下替代形式Cipher.init:
cipher.init(Cipher.DECRYPT_MODE, privKey, new OAEPParameterSpec(
"SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT
));
Run Code Online (Sandbox Code Playgroud)
问:有没有转变是Cipher.getInstance会认识到,与类似的效果"RSA/ECB/OAEPWithSHA-256AndMGF1Padding",除了与MGF1使用SHA-256?
数据解密将使用RSA/ECB/OAEPWithSHA-256AndMGF1Padding算法在JAVA中运行。RSA/ECB/OAEPWithSHA-256AndMGF1Padding所以我必须使用相当于中的算法用公钥加密数据node.js。
我尝试crypto.publicEncrypt(key, buffer)使用 crypto.constants.RSA_PKCS1_OAEP_PADDING ,它与上述算法不相似。所以我需要相当于“RSA/ECB/OAEPWithSHA-256AndMGF1Padding”的算法或如何在node.js中实现相同的效果
我的任务是编写一个涉及加密的小型Java控制台应用程序.我不熟悉加密,所以我必须先做一些阅读.到目前为止,给出的高级要求是AES-256应该用于生成一次性密钥来加密文件.
之后,应使用收件人的公钥(RSA-2048)来加密该AES-256一次性密钥.然后,加密文件和加密的一次性AES-256密钥将被压缩并发送给收件人.
根据我对读取加密和解密的理解,除了算法(RSA,AES等)之外,还有称为模式和填充的东西.例如,以下代码将RSA指定为算法,ECB模式和PKCS1Padding.
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)
在加密和解密中必须使用相同的算法,模式和填充.因此,我可以向用户询问他们想要的模式和填充是否合理?
我注意到Cipher cipher = Cipher.getInstance("RSA")似乎使用了ECB的默认模式和PKCS1Padding的填充,因此这行代码与上面相同.那么可以假设ECB模式和PKCS1Padding模式将默认用于RSA-2048吗?
我遇到过 Java 程序使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 加密文本的情况。
我需要在 C# 中解密它。
Java 中的加密和解密工作正常。
使用 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 在 Java 中加密并在 C# 中解密工作得非常好。
但是,使用 Java 中的 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 加密和 C# 中的 OaepSHA256 解密会出现错误:参数不正确。
用于加密的Java代码:
public static String encrypt(KeyPair keypair, String data) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
//Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
c.init(Cipher.ENCRYPT_MODE, keypair.getPublic());
return Base64.getEncoder().encodeToString(c.doFinal(data.getBytes()));
}
Run Code Online (Sandbox Code Playgroud)
解密的C#代码:
public string DecryptRsa(byte[] encryptedBytes, X509Certificate2 x509Certificate2, RSAEncryptionPadding rSAEncryptionPadding)
{
var text = string.Empty;
using (RSACng csp = (RSACng)x509Certificate2.GetRSAPrivateKey())
{
byte[] bytesDecrypted = csp.Decrypt(encryptedBytes, rSAEncryptionPadding); …Run Code Online (Sandbox Code Playgroud)