- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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()));
}
用于解密的 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);
text = Encoding.UTF8.GetString(bytesDecrypted);
}
return text;
}
我究竟做错了什么?请帮忙。
最佳答案
OAEP 使用两个摘要,OAEP 摘要和 MGF1 摘要,请参阅 RFC8017 .
SunJCE 提供程序指定为 RSA/ECB/OAEPWithSHA-256AndMGF1Padding
OAEP 摘要为 SHA256,而 MGF1 摘要默认为 SHA1,请参阅 here .另一方面,C# 代码指定为 OaepSHA256
两个摘要都为 SHA256。因此,这两个代码是不兼容的。
修复方法是使用 OAEPParameterSpec
显式指定 Java 中的摘要。 (出于这个原因,无论如何都应该这样做)。在 C# 方面,机载方法无法修复,因为不支持两个摘要的单独规范。但是可以使用支持这一点的 BouncyCaSTLe。
修复,Java 代码端(两个摘要的 SHA256):
RSAPublicKey publicKey = ...
OAEPParameterSpec oaepParameterSpec = new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT);
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey, oaepParameterSpec);
byte[] ciphertext = cipher.doFinal(plaintext);
修复,C# 代码端,使用 BouncyCaSTLe(用于 OAEP 摘要的 SHA256,用于 MGF1 摘要的 SHA1):
using Org.BouncyCastle.Crypto.Digests;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Parameters;
...
RsaKeyParameters privateKey = ...
OaepEncoding oaepEncoding = new OaepEncoding(new RsaEngine(), new Sha256Digest(), new Sha1Digest(), null);
oaepEncoding.Init(false, privateKey);
byte[] decrypted = oaepEncoding.ProcessBlock(ciphertext, 0, ciphertext.Length);
关于c# - 使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 在 Java 中加密,使用 OAEPSHA256 Padding 在 c# 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68259462/
我想将代码从 Java 迁移到 Go,这些方法应该能够对彼此的输出进行加密/解密,但是它们会生成不同的结果并且无法解密其他密码: java代码 public static byte[] encrypt
Java 有一个名为 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 的模式。这到底是什么意思? RFC3447 ,公钥加密标准 (PKCS) #1:RSA 加密规范版本
在 javax crypto 中使用 RSA 加密时遇到了一个奇怪的问题。我正在使用 RSA/None/OAEPWITHSHA-256ANDMGF1PADDING模式如下: Cipher ciphe
我要提前说我对密码学了解不多(仅限基础知识)。我正在尝试实现 Credential OpenHome 服务,我想加密密码以将其发送到设备。 设备提供了一个用 C 编写的函数,它返回一个公钥字符串,如下
我的应用程序正在访问电子 token 以解密来自服务器的响应 来自服务器的 session key 使用以下方法加密:- RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 我
我正在尝试在 Java 中加密字符串并在 C# 中解密。我首先尝试使用 RSA/ECB/PKCS1PADDING,它非常有效,但现在我正尝试切换到 OAEP 填充,但我无法使其工作。加密工作正常但不是
经过docs之后我找不到使用 WithMD5AndMGF1Padding 使用 RSA-OAEP 加密数据的方法。所以基本上我不知道他们使用什么填充 最佳答案 对于 MGF1,默认值通常是 SHA-1
我正在尝试将一些 java 加密代码迁移到 golang 中并遇到了这个 Cipher cipher = Cipher.getInstance(RSA_ECB_OAEPWithSHA256AndMGF
我有这个用于加密和解密的java代码,我想将其更改/转换为Ruby代码。我在 OpenSSL gem 中查找,但没有找到可用于 ruby 的“RSA/ECB/OAEPWithSHA-256AndM
我有这个用于加密和解密的java代码,我想将其更改/转换为Ruby代码。我在 OpenSSL gem 中查找,但没有找到可用于 ruby 的“RSA/ECB/OAEPWithSHA-256AndM
我有一个案例,一个“ secret ”从 Java 应用程序传给我,并且使用公钥和 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 密码对其进行加密。我试图在最后破译它,但
我需要在 C# .NET 4.7.2 中加密一些文本,我需要使用的密码是 RSA/ECB/OAEPWithSHA-1AndMGF1Padding。然而,内置的 C# 类 RSACryptoServic
我通常会在这里找到大部分问题的答案,但这次我需要问 :-)。 我们在 Android 8.0(API 级别 26)上运行的一个应用程序中遇到了 RSA 加密/解密问题。 我们一直在将 RSA 与“RS
据我所知,两者是相同的,但一个在一台 PC 上工作,而相同的代码说: javax.crypto.NoSuchPaddingException:OAEPWITHSHA-256ANDMGF1PADDING
数据解密将在 JAVA 中使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 运行。算法。所以我必须使用等效于 RSA/ECB/OAEPWithSHA-256AndMGF
我在 Oracle 的 Java 标准加密提供程序中找到了困难的方法 Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF
我们有一个要求,在 Java 中进行加密而 .NET 进行解密。问题在于 .NET 中的非对称解密,Java 中使用的算法、模式和填充,而加密是“RSA/ECB/OAEPWithSHA-256AndM
我有一个 Java 程序使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 加密文本的情况。 我需要在 C# 中解密它。 加密和解密在 Java 中工作正常。 使用 RS
我是一名优秀的程序员,十分优秀!