C # RSA без дополнения - PullRequest
       63

C # RSA без дополнения

3 голосов
/ 12 октября 2009

Я занят, пытаясь портировать Java-код, который выглядит следующим образом

        Cipher rsa = Cipher.getInstance("RSA/ECB/nopadding");
        rsa.init(Cipher.DECRYPT_MODE, RSAPrivateKey);
        decryptedData = rsa.doFinal(data, 0, 128);

в C #, но, как кажется RSACryptoServiceProvider, вынуждает вас использовать заполнение OEAP или PKCS1. Я знаю, что заполнение не является безопасным, но в этом случае я работаю с клиентом с закрытым исходным кодом, поэтому я ничего не могу с этим поделать. Есть ли способ обойти эту проблему заполнения?

Ответы [ 2 ]

1 голос
/ 12 октября 2009

Возможно, вы захотите получить код от BouncyCastle, http://www.bouncycastle.org/csharp/, и изменить код по ссылке ниже, и убедитесь, что он может использовать шифрование, которое вы перечислили выше.

http://www.java2s.com/Code/Java/Security/Whatisinbouncycastlebouncycastle.htm

0 голосов
/ 31 января 2019

BouncyCastle поможет нам сделать nopadding RSA-шифрование.

public string RsaEncryptWithPublic(string clearText, string publicKey)
    {
        //  analogue of Java:
        //  Cipher rsa = Cipher.getInstance("RSA/ECB/nopadding");
        try
        {
            var bytesToEncrypt = Encoding.ASCII.GetBytes(clearText);

            var encryptEngine = new RsaEngine(); // new Pkcs1Encoding (new RsaEngine());


            using (var txtreader = new StringReader("-----BEGIN PUBLIC KEY-----\n" + publicKey+ "\n-----END PUBLIC KEY-----"))
            {
                var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();

                encryptEngine.Init(true, keyParameter);
            }

            var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
            return encrypted;
        }
        catch 
        {

            return "";
        }
    }

также не забудьте поставить его сверху:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.OpenSsl;
...