使用模量和指数的C#中的RSA / ECB / PKCS1填充解密

考斯敏·瓦娜(Cosmin Vana)

我有一个来自Java服务器的加密值。我需要解密它。服务的文档为我提供了以下解密算法,提供程序将向我发送“ m”和“ e”值:

Java代码:

private  String RSA_Decryption(String encryptedData) 
        throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException,     IOException, IllegalBlockSizeException, BadPaddingException, GeneralSecurityException 
{
    BigInteger m = new BigInteger("verylongnumber1");
    BigInteger e = new BigInteger("verylongnumber2");

    RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(m, e);
    KeyFactory fact = KeyFactory.getInstance("RSA");
    PrivateKey privateKey = fact.generatePrivate(keySpec);

    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
    byte[] decValue = cipher.doFinal(decordedValue);
    String decryptedValue = new String(decValue, "UTF-8");

    return decryptedValue;     
}

我需要在C#中进行转换。到目前为止,我尝试了以下C#代码(使用.NET的BigInteger类):

string m = "verylongnumber1";
string e = "verylongnumber2";

RSAParameters info = new RSAParameters();
var modulus = BigInteger.Parse(m).ToByteArray();
if (modulus.Length == 129) Array.Resize(ref modulus, 128); // it gives me 129 characters, the last being 0

var exponent = BigInteger.Parse(e).ToByteArray();

info.Modulus = modulus.Reverse().ToArray();
info.D = exponent.Reverse().ToArray();

var encryptedData = Convert.FromBase64String(@"gEQwzXpaARzC2pz9ahiyji8G/K9xecMzh6qi7hMmih4kR4hBwwjfcX83lNet91/hzHX9if1XwAe7/fO5xgXR8qLY+sZu9mj+iXiaSgYyQO3VyxcMD6q/wiVBXpOCX/LmG6qCVbFgn6LZvvcx9fUjVEn3FJFpqUhQh9PvNjmg8ks=");

var decryptedValue = this.Decrypt(encryptedData, info);
string decryptedBarcode = Encoding.Default.GetString(decryptedValue);

byte[] decryptedBytes;
using (RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider())
{
    rsa1.ImportParameters(info); // throws exception with "Bad data" message
    decryptedBytes = rsa1.Decrypt(encryptedData, false);
}

但是,当我想在rsa1实例中导入keyInfo时,出现“ Bad Data”消息异常。

我也尝试过:

  • 设置info.Exponent而不是info.D
  • 使用Chew Keong提供的BigInteger类和getBytes方法获取模数和指数的字节(还要在info.Exponent和info.D中设置数组,带和不带反向)。

一切都导致带有“错误数据”消息的相同异常。

谁能帮我翻译成C#等价的Java代码吗?

黑暗松鼠42

不幸的是,标准的RSACryptoServiceProvider不适合这种特定情况...请自己看:

如果您尝试导入RSAParameters,则有几个字段供您填写...

模数...密钥对的通用模数...在您的情况下为m
指数...公有指数...公钥的一部分,用于加密

D ...私有指数...私钥的一部分,用于解密(在您的情况下为e)

P和Q ...密钥对的2个质数... P * Q =模
DP和DQ ...数学快捷方式的中间值(中国余数定理),用于更快的解密方式

所以...您得到了模数和私有指数...虽然通常足以解密,但它不是完整的密钥对... P和Q缺失...有了P和Q,我们可以计算出休息...

RSACryptoServiceProvider希望您提供完整的密钥对,如果您想解密...一个缺失的值,您将得到那个讨厌的cryptographicexception,告诉您“坏数据”

如此...一切都输了吗?否……前一段时间,还有一个关于RSA的问题,我为此写了几行仅使用bigintegers处理RSA的行,而根本没有使用RSACryptoServiceProvider ...使用RSACryptoServiceProvider进行公钥加密

也许可以帮助您将价值解密

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有DECRYPT_MODE的RSA / ECB / PKCS1填充

来自分类Dev

具有DECRYPT_MODE的RSA / ECB / PKCS1填充

来自分类Dev

如何在Java中使用给定的公钥以rsa / ecb / pkcs1填充模式对文本进行编码?

来自分类Dev

PHP 7.2 中的 RSA/ECB/PKCS1Padding 解密

来自分类Dev

错误的填充例外-pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

来自分类Dev

错误的填充例外-pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

来自分类Dev

iOS上的RSA加密(RSA / ECB / PKCS1Padding)

来自分类Dev

在C#中解密使用PCKS5填充的AES / ECB时遇到问题

来自分类Dev

NET的Java RSA / ECB / PKCS1Padding加密

来自分类Dev

NET的Java RSA / ECB / PKCS1Padding加密

来自分类Dev

C#中的简单DES ECB加密和解密

来自分类Dev

我正在使用 AES ECB 256 填充 - 加密发送数据,但我无法实现解密

来自分类Dev

.NET等效于Java KeyFactory.getInstance“ RSA” /“ RSA / ECB / PKCS1Padding”

来自分类Dev

C#Bouncy Castle中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING-输入太大,无法使用RSA密码

来自分类Dev

使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

来自分类Dev

C#等效于Java RSA / ECB / OAEPWithSHA-256AndMGF1Padding

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

CryptoJS AES 256 ECB解密

来自分类Dev

AES / ECB解密数据的大小

来自分类Dev

使用PKCS1生成私钥RSA

来自分类Dev

C和Java中的输出AES / ECB / PKCS7不相同

来自分类Dev

RSA / ECB / OAEPWithSHA-256AndMGF1Padding但使用SHA-256的MGF1吗?

来自分类Dev

JPK-CryptoAPI RSA 256 / ECB / PKCS#1一次秘密密码加密,使用证书中的公钥(解决方案)

来自分类Dev

在SPGridview中禁用ECB菜单

来自分类Dev

使用node.js从使用php / mcrypt创建的AES-ECB密文中解密

来自分类Dev

WinRT中的AES ECB解密,可从.NET Desktop转换代码

来自分类Dev

在php中使用mcrypt_ecb()函数时,加密和解密的结果不同

来自分类Dev

在某些情况下,使用AES ECB模式'BadPaddingException'进行加密和解密

Related 相关文章

  1. 1

    具有DECRYPT_MODE的RSA / ECB / PKCS1填充

  2. 2

    具有DECRYPT_MODE的RSA / ECB / PKCS1填充

  3. 3

    如何在Java中使用给定的公钥以rsa / ecb / pkcs1填充模式对文本进行编码?

  4. 4

    PHP 7.2 中的 RSA/ECB/PKCS1Padding 解密

  5. 5

    错误的填充例外-pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

  6. 6

    错误的填充例外-pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

  7. 7

    iOS上的RSA加密(RSA / ECB / PKCS1Padding)

  8. 8

    在C#中解密使用PCKS5填充的AES / ECB时遇到问题

  9. 9

    NET的Java RSA / ECB / PKCS1Padding加密

  10. 10

    NET的Java RSA / ECB / PKCS1Padding加密

  11. 11

    C#中的简单DES ECB加密和解密

  12. 12

    我正在使用 AES ECB 256 填充 - 加密发送数据,但我无法实现解密

  13. 13

    .NET等效于Java KeyFactory.getInstance“ RSA” /“ RSA / ECB / PKCS1Padding”

  14. 14

    C#Bouncy Castle中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING-输入太大,无法使用RSA密码

  15. 15

    使用 AES/ECB/NoPadding 与 PKCS5Padding 进行加密

  16. 16

    C#等效于Java RSA / ECB / OAEPWithSHA-256AndMGF1Padding

  17. 17

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  18. 18

    用Java加密/解密“ AES / ECB / PKCS5Padding”

  19. 19

    CryptoJS AES 256 ECB解密

  20. 20

    AES / ECB解密数据的大小

  21. 21

    使用PKCS1生成私钥RSA

  22. 22

    C和Java中的输出AES / ECB / PKCS7不相同

  23. 23

    RSA / ECB / OAEPWithSHA-256AndMGF1Padding但使用SHA-256的MGF1吗?

  24. 24

    JPK-CryptoAPI RSA 256 / ECB / PKCS#1一次秘密密码加密,使用证书中的公钥(解决方案)

  25. 25

    在SPGridview中禁用ECB菜单

  26. 26

    使用node.js从使用php / mcrypt创建的AES-ECB密文中解密

  27. 27

    WinRT中的AES ECB解密,可从.NET Desktop转换代码

  28. 28

    在php中使用mcrypt_ecb()函数时,加密和解密的结果不同

  29. 29

    在某些情况下,使用AES ECB模式'BadPaddingException'进行加密和解密

热门标签

归档