Ошибка при декодировании заполнения oaep autocom

Поюзал много веток но толком описания восстановления, прошивки и т.д автокомов тут нет или я плохо смотрел? Неужели я первый у кого всё работало прекрасно на версиях до 2014.3.2 а после установки и активации при первой же попытке обновить прошивку выдаёт ответ об ошибке! Железо программа видит но работать с ним не хочет пока не увидит новое ПО головы! Направьте куда нибудь…

Если стабильно работала со старой версией — не надо обновлять.

Перед запуском новой версии закидывайте папку Firmware от старой.

Запуск проги, тест и работайте.

Если слетела прошивка — востанавливайте старой версией.

While decrypting text using RSACryptoServiceProvider.Decrypt, I am getting the error:

Error occurred while decoding OAEP padding.

Here’s my code:

CspParameters cspParam = new CspParameters();

cspParam = new CspParameters();

cspParam.Flags = CspProviderFlags.UseMachineKeyStore;

clsCertificates cc = new clsCertificates();

string a = "";

cc.OpenStoreIE(ref a);

cc.SetProperties();

X509Certificate2 cert = new X509Certificate2();

cert = cc.x509_2Cert;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParam);

//to gentrate private and public keys from the certificate

rsa.FromXmlString(cert.PublicKey.Key.ToXmlString(false));


String publicKey = rsa.ToXmlString(false); // gets the public key 
String privateKey = rsa.ToXmlString(true); // gets the private key working if paramter is false if true give error key is not valid for use in specified state

Response.Write("<Textarea rows=10 cols=100>PUBLIC: " + publicKey + "</TextArea>");

Response.Write("<Textarea rows=10 cols=100>PRIVATE: " + privateKey + "</Textarea>");

Response.Write("<BR>Encrypting the string "HelloThere" with the public Key:<BR>");

String str = "HelloThere";

RSACryptoServiceProvider RSA2 = new RSACryptoServiceProvider(cspParam);



//---Load the Public key---

RSA2.FromXmlString(publicKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA2.ToXmlString(true);

Byte[] EncryptedStrAsByt = RSA2.Encrypt(System.Text.Encoding.Unicode.GetBytes(str), true);

String EncryptedStr = System.Text.Encoding.Unicode.GetString(EncryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Encrypted String: " + EncryptedStr + "</Textarea>");

Response.Write("<BR>Decrypting the Encrypted String with the Private key:<BR>");



RSACryptoServiceProvider RSA3 = new RSACryptoServiceProvider(cspParam);



//---Load the Private key---

RSA3.FromXmlString(privateKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA3.ToXmlString(true);

Byte[] DecryptedStrAsByt = RSA3.Decrypt(EncryptedStrAsByt, true );//Error if true then error is error occured while decoding the OAE$P padding and if false then error is bad key i am using windows xp so it should be true.

String DecryptedStr = System.Text.Encoding.Unicode.GetString(DecryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Decrypted String: " + DecryptedStr + "</Textarea>");

The above is works if I am not using the keys of my digital certificate. but if the keys are from the digital certificate, I get the OAEP padding error.

Note: This question is in continuation of the Error occurred while decoding OAEP padding question

Luke Willis's user avatar

Luke Willis

8,4094 gold badges45 silver badges79 bronze badges

asked Jun 5, 2009 at 5:48

Meetu Choudhary's user avatar

Meetu ChoudharyMeetu Choudhary

1,3634 gold badges14 silver badges26 bronze badges

10

A common mistake is to try to decrypt using the public key.

answered Oct 24, 2009 at 17:23

rohancragg's user avatar

5

I ran into this exact problem. UnicodeEncoding.GetBytes is not always the inverse of UnicodeEncoding.GetString.

byte[] a = new byte[32];

RandomNumberGenerator gen = new RNGCryptoServiceProvider();
gen.GetBytes(a);

UnicodeEncoding byteConverter = new UnicodeEncoding();

byte[] b = byteConverter.GetBytes(byteConverter.GetString(a));

//byte array 'a' and byte array 'b' will not always contain the same elements.

This is why RSACryptoServiceProvider.Decrypt fails. A lot of encrypt/decrypt examples on the web use Unicode encoding. Do not use Unicode encoding. Use Convert.FromBase64String and Convert.ToBase64String instead.

user7116's user avatar

user7116

62.8k17 gold badges141 silver badges172 bronze badges

answered Jan 29, 2010 at 18:25

anvilis's user avatar

anvilisanvilis

2312 silver badges4 bronze badges

3

This error normally indicates you are using a public key to decrypt, while you should be using a private key for decryption. Give it a try.

gitsitgo's user avatar

gitsitgo

6,5593 gold badges33 silver badges45 bronze badges

answered Sep 23, 2010 at 22:55

user456732's user avatar

user456732user456732

511 silver badge1 bronze badge

1

In my case the error has been caused by wrong padding settings.

Error: RSA decrypt: error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error

I had openssl_public_encrypt() with OPENSSL_PKCS1_PADDING as a default value in PHP and keypair.decrypt() with the default value RSA_PKCS1_OAEP_PADDING in node-rsa.

So don’t forget to check these options too.

answered Aug 13, 2012 at 14:09

o_nix's user avatar

o_nixo_nix

1,1461 gold badge16 silver badges30 bronze badges

FYI, you can still be (en/de)crypting in the right key sequence (encr:pub key, decr:priv key) — i.e. can still get this error decrypting with a private key — it just may be the wrong private key (i.e. from another cert/key pair), not the one paired w/ the pub key with which u encrypted initially. If u turn off OAEP padding and get a «bad data» exception, that’s another indication.

answered Oct 10, 2018 at 21:35

galaxis's user avatar

galaxisgalaxis

9158 silver badges10 bronze badges

1

We were getting this issue when we were using the wrong key for decryption.

answered Jan 27, 2017 at 17:20

Zach Wymer's user avatar

Zach WymerZach Wymer

5409 silver badges11 bronze badges

RSA encryption may result non readable character, make sure not to cut the string due to special character indicating end of something during write/read the encryption result; e.g you must not use strlen for it will stop when encounter a » in the string.

answered May 26, 2014 at 2:52

user3121260's user avatar

Another thing to check: it was giving me this error, on the decrypt operation, as a result of forgetting to pass the public key into the RSACryptoServiceProvider for the encrypt operation.

answered Apr 24, 2015 at 20:28

user1454265's user avatar

user1454265user1454265

85811 silver badges25 bronze badges

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
void EncryptFile(string inputFile, string outputFile)
        {
 
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
               
                var rsaOpenKey = RSA.ExportParameters(false);//экспорт открытого ключа
 
                rsa.ImportParameters(rsaOpenKey);
 
                using (var fstreamIn = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
                using (var fstreamOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
                {
                    byte[] buf = new byte[64];
                    for (; ; )
                    {
                        int bytesRead = fstreamIn.Read(buf, 0, buf.Length);
                        if (bytesRead == 0) break;
                        byte[] encrypted = bytesRead == buf.Length ? rsa.Encrypt(buf, true) : rsa.Encrypt(buf.Take(bytesRead).ToArray(), true);
                        fstreamOut.Write(encrypted, 0, encrypted.Length);
                    }
                }
            }
        }
 
        void DecryptFile(string inputFile, string outputFile)
        {
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                var rsaPrivateKey = RSA.ExportParameters(true);//экспорт закрытого ключа
                rsa.ImportParameters(rsaPrivateKey);
 
                using (var fstreamIn = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
                using (var fstreamOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
                {
                    byte[] buf = new byte[128];
                    for (; ; )
                    {
                        int bytesRead = fstreamIn.Read(buf, 0, buf.Length);
                        if (bytesRead == 0) break;
                        byte[] decrypted = rsa.Decrypt(buf, true);
                        fstreamOut.Write(decrypted, 0, decrypted.Length);
                    }
                }
            }
        }
 
        private void Button1_Click(object sender, EventArgs e)
        {
            
            EncryptFile(Environment.CurrentDirectory+"in.txt",Environment.CurrentDirectory+"out.txt");
        }
 
        private void Button2_Click(object sender, EventArgs e)
        {
 
            DecryptFile(Environment.CurrentDirectory + "out.txt", Environment.CurrentDirectory + "in1.txt");
        }
    }

Во время расшифровки текста с помощью RSACryptoServiceProvider.Decrypt Я получаю сообщение об ошибке:

Произошла ошибка при декодировании заполнения OAEP.

Вот мой код:

CspParameters cspParam = new CspParameters();

cspParam = new CspParameters();

cspParam.Flags = CspProviderFlags.UseMachineKeyStore;

clsCertificates cc = new clsCertificates();

string a = "";

cc.OpenStoreIE(ref a);

cc.SetProperties();

X509Certificate2 cert = new X509Certificate2();

cert = cc.x509_2Cert;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParam);

//to gentrate private and public keys from the certificate

rsa.FromXmlString(cert.PublicKey.Key.ToXmlString(false));


String publicKey = rsa.ToXmlString(false); // gets the public key 
String privateKey = rsa.ToXmlString(true); // gets the private key working if paramter is false if true give error key is not valid for use in specified state

Response.Write("<Textarea rows=10 cols=100>PUBLIC: " + publicKey + "</TextArea>");

Response.Write("<Textarea rows=10 cols=100>PRIVATE: " + privateKey + "</Textarea>");

Response.Write("<BR>Encrypting the string "HelloThere" with the public Key:<BR>");

String str = "HelloThere";

RSACryptoServiceProvider RSA2 = new RSACryptoServiceProvider(cspParam);



//---Load the Public key---

RSA2.FromXmlString(publicKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA2.ToXmlString(true);

Byte[] EncryptedStrAsByt = RSA2.Encrypt(System.Text.Encoding.Unicode.GetBytes(str), true);

String EncryptedStr = System.Text.Encoding.Unicode.GetString(EncryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Encrypted String: " + EncryptedStr + "</Textarea>");

Response.Write("<BR>Decrypting the Encrypted String with the Private key:<BR>");



RSACryptoServiceProvider RSA3 = new RSACryptoServiceProvider(cspParam);



//---Load the Private key---

RSA3.FromXmlString(privateKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA3.ToXmlString(true);

Byte[] DecryptedStrAsByt = RSA3.Decrypt(EncryptedStrAsByt, true );//Error if true then error is error occured while decoding the OAE$P padding and if false then error is bad key i am using windows xp so it should be true.

String DecryptedStr = System.Text.Encoding.Unicode.GetString(DecryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Decrypted String: " + DecryptedStr + "</Textarea>");

Вышеуказанное работает, если я не использую ключи моего цифрового сертификата. но если ключи взяты из цифрового сертификата, я получаю ошибку заполнения OAEP.

Примечание. Этот вопрос является продолжением ошибки, возникшей при декодировании вопроса заполнения OAEP.

2009-06-05 05:48

8
ответов

Распространенной ошибкой является попытка расшифровки с использованием открытого ключа.


user5351

24 окт ’09 в 17:23
2009-10-24 17:23

2009-10-24 17:23

Я столкнулся с этой точной проблемой. UnicodeEncoding.GetBytes не всегда обратное UnicodeEncoding.GetString,

byte[] a = new byte[32];

RandomNumberGenerator gen = new RNGCryptoServiceProvider();
gen.GetBytes(a);

UnicodeEncoding byteConverter = new UnicodeEncoding();

byte[] b = byteConverter.GetBytes(byteConverter.GetString(a));

//byte array 'a' and byte array 'b' will not always contain the same elements.

Вот почему RSACryptoServiceProvider.Decrypt выходит из строя. Многие примеры шифрования / дешифрования в Интернете используют кодировку Unicode. Не используйте кодировку Unicode. использование Convert.FromBase64String а также Convert.ToBase64String вместо.

2010-01-29 18:25

Эта ошибка обычно указывает, что вы используете открытый ключ для расшифровки, в то время как вы должны использовать закрытый ключ для расшифровки. Попробуйте.

2010-09-23 22:55

В моем случае ошибка была вызвана неправильными настройками заполнения.

Error: RSA decrypt: error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error

я имел openssl_public_encrypt() с OPENSSL_PKCS1_PADDING в качестве значения по умолчанию в PHP и keypair.decrypt() со значением по умолчанию RSA_PKCS1_OAEP_PADDING в узле-RSA.

Так что не забудьте проверить эти параметры тоже.

2012-08-13 14:09

К вашему сведению, вы все еще можете (en/de) шифровать в правильной последовательности ключей (encr: ключ pub, decr:priv key), только что вы смешали ключи / расшифровку, используя закрытый ключ из другой пары сертификат / ключ, и не тот, который был в паре с ключом публикации, с которым вы зашифровали изначально. Если вы отключите заполнение OAEP и получите исключение «неверные данные», это еще одно указание.

2018-10-10 21:35

Мы получили эту проблему, когда мы использовали неправильный ключ для расшифровки.

2017-01-27 17:20

Еще одна вещь, которую нужно проверить: она выдавала мне эту ошибку при операции дешифрования в результате забвения передачи открытого ключа в RSACryptoServiceProvider для операции шифрования.

2015-04-24 20:28

Шифрование RSA может привести к нечитаемому символу, убедитесь, что строка не обрезается из-за специального символа, указывающего конец чего-либо во время записи / чтения результата шифрования; Например, вы не должны использовать strlen, потому что он остановится, когда в строке встретится ».

2014-05-26 02:52

При расшифровке текста с помощью RSACryptoServiceProvider.Decrypt я получаю сообщение об ошибке:

Ошибка при декодировании заполнения OAEP.

Вот мой код:

CspParameters cspParam = new CspParameters();

cspParam = new CspParameters();

cspParam.Flags = CspProviderFlags.UseMachineKeyStore;

clsCertificates cc = new clsCertificates();

string a = "";

cc.OpenStoreIE(ref a);

cc.SetProperties();

X509Certificate2 cert = new X509Certificate2();

cert = cc.x509_2Cert;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParam);

//to gentrate private and public keys from the certificate

rsa.FromXmlString(cert.PublicKey.Key.ToXmlString(false));


String publicKey = rsa.ToXmlString(false); // gets the public key 
String privateKey = rsa.ToXmlString(true); // gets the private key working if paramter is false if true give error key is not valid for use in specified state

Response.Write("<Textarea rows=10 cols=100>PUBLIC: " + publicKey + "</TextArea>");

Response.Write("<Textarea rows=10 cols=100>PRIVATE: " + privateKey + "</Textarea>");

Response.Write("<BR>Encrypting the string "HelloThere" with the public Key:<BR>");

String str = "HelloThere";

RSACryptoServiceProvider RSA2 = new RSACryptoServiceProvider(cspParam);



//---Load the Public key---

RSA2.FromXmlString(publicKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA2.ToXmlString(true);

Byte[] EncryptedStrAsByt = RSA2.Encrypt(System.Text.Encoding.Unicode.GetBytes(str), true);

String EncryptedStr = System.Text.Encoding.Unicode.GetString(EncryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Encrypted String: " + EncryptedStr + "</Textarea>");

Response.Write("<BR>Decrypting the Encrypted String with the Private key:<BR>");



RSACryptoServiceProvider RSA3 = new RSACryptoServiceProvider(cspParam);



//---Load the Private key---

RSA3.FromXmlString(privateKey);

//working with the folowing line instead of above but i need the keys of he certificte

//RSA3.ToXmlString(true);

Byte[] DecryptedStrAsByt = RSA3.Decrypt(EncryptedStrAsByt, true );//Error if true then error is error occured while decoding the OAE$P padding and if false then error is bad key i am using windows xp so it should be true.

String DecryptedStr = System.Text.Encoding.Unicode.GetString(DecryptedStrAsByt);

Response.Write("<Textarea rows=10 cols=100>Decrypted String: " + DecryptedStr + "</Textarea>");

Вышеупомянутое работает, если я не использую ключи своего цифрового сертификата. но если ключи из цифрового сертификата, я получаю ошибку заполнения OAEP.

Примечание. Этот вопрос является продолжением вопроса Произошла ошибка при декодировании заполнения OAEP.

8 ответов

Распространенной ошибкой является попытка расшифровать с помощью открытого ключа.


23

rohancragg
24 Окт 2009 в 21:23

Я столкнулся именно с этой проблемой. UnicodeEncoding.GetBytes не всегда является обратным UnicodeEncoding.GetString.

byte[] a = new byte[32];

RandomNumberGenerator gen = new RNGCryptoServiceProvider();
gen.GetBytes(a);

UnicodeEncoding byteConverter = new UnicodeEncoding();

byte[] b = byteConverter.GetBytes(byteConverter.GetString(a));

//byte array 'a' and byte array 'b' will not always contain the same elements.

Вот почему RSACryptoServiceProvider.Decrypt терпит неудачу. Многие примеры шифрования/дешифрования в Интернете используют кодировку Unicode. Не используйте кодировку Unicode. Вместо этого используйте Convert.FromBase64String и Convert.ToBase64String.


15

user7116
19 Окт 2011 в 05:39

Эта ошибка обычно указывает на то, что вы используете открытый ключ для расшифровки, в то время как для расшифровки следует использовать закрытый ключ. Попробуйте.


4

gitsitgo
7 Фев 2017 в 01:57

В моем случае ошибка была вызвана неправильными настройками заполнения.

Error: RSA decrypt: error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error

У меня было openssl_public_encrypt() с OPENSSL_PKCS1_PADDING в качестве значения по умолчанию в PHP и keypair.decrypt() со значением по умолчанию RSA_PKCS1_OAEP_PADDING в узел-rsa.

Так что не забудьте проверить и эти параметры.


2

o_nix
13 Авг 2012 в 18:09

К вашему сведению, вы все еще можете (en/de)шифровать в правильной последовательности ключей (encr:pub key, decr:priv key) — т.е. все еще можете получить эту ошибку при расшифровке с помощью закрытого ключа — просто это может быть неправильным закрытый ключ (т. е. из другой пары сертификат/ключ), а не тот, который связан с открытым ключом, с помощью которого вы зашифровали изначально. Если вы отключите заполнение OAEP и получите исключение «плохие данные», это еще один признак.


1

galaxis
10 Июн 2020 в 18:43

Шифрование RSA может привести к нечитаемому символу, убедитесь, что строка не обрезана из-за специального символа, указывающего на конец чего-либо во время записи/чтения результата шифрования; например, вы не должны использовать strlen, так как он остановится, когда в строке встретится ‘ 0’.


0

user3121260
26 Май 2014 в 06:52

Еще одна вещь, которую нужно проверить: это выдавало мне эту ошибку при операции расшифровки в результате того, что я забыл передать открытый ключ в RSACryptoServiceProvider для операции шифрования.


0

user1454265
24 Апр 2015 в 23:28

Мы сталкивались с этой проблемой, когда использовали неправильный ключ для расшифровки.


0

Zach Wymer
27 Янв 2017 в 20:20

Понравилась статья? Поделить с друзьями:
  • Ошибка при голосовом поиске гугл
  • Ошибка при голосовании единой россии
  • Ошибка при генерации сертификата в личном кабинете налогоплательщика
  • Ошибка при генерации кода для свойства update order
  • Ошибка при генерации карты rimworld multiplayer