Why RSA encryption can return different results with C# and Java?

后端 未结 4 839
梦毁少年i
梦毁少年i 2021-01-14 03:39

I using:

  • c#: RSACryptoServiceProvider
  • JAVA: KeyFactory.getInstance(\"RSA\")+Cipher

I sending public key (exponent + mo

相关标签:
4条回答
  • 2021-01-14 04:04

    RSA Parameters contains more parameters than modulus and exponent if i remember correctly. You need fully initialized rsa parameters to get the encryption correct (in .net).

    Moreover, your private and private key is not even set in .net

    0 讨论(0)
  • 2021-01-14 04:05

    RSA Encription mustn't return diffferent values with simular keys - its standardized algorithm. Check your keys.

    0 讨论(0)
  • 2021-01-14 04:10

    i hope this is helpful , in C# lough code

                byte[] rsaExp = rsaParameters.Exponent.ToByteArray();
                byte[] Modulus = rsaParameters.Modulus.ToByteArray();
    
                // Microsoft RSAParameters modulo wants leading zero's removed so create new array with leading zero's removed
                int Pos = 0;
                for (int i = 0; i < Modulus.Length; i++)
                {
                    if (Modulus[i] == 0)
                    {
                        Pos++;
                    }
                    else
                    {
                        break;
                    }
                }
                byte[] rsaMod = new byte[Modulus.Length - Pos];
                Array.Copy(Modulus, Pos, rsaMod, 0, Modulus.Length - Pos);
    
    0 讨论(0)
  • 2021-01-14 04:23

    RSA encryption is randomized. For a given public key and a given message, each attempt at encryption yields a distinct sequence of bytes. This is normal and expected; random bytes are injected as part of the padding phase, and not injecting random bytes would result in a weak encryption system. During decryption, the padding bytes are located and removed, and the original message is recovered unscathed.

    Hence it is expected that you will get distinct encrypted messages with Java and C#, but also if you run your Java or C# code twice.

    0 讨论(0)
提交回复
热议问题