Ошибка расшифровки RSA в C # с неверными данными - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующая пара ключей, сгенерированная с помощью приложения на C #:

   string privateKey = "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";
   string publicKey = "BgIAAACkAABSU0ExABAAAAEAAQC9ei8ymPhu650jILqwMHkUsiBlgN9XT14Q1gWUMcOoswaiDmV9FcH0NmhVK0hgy6cWCogE55AkszhaWtmqd/x5wiHtnYmKqxyNP8Br4PlOxsT3r5isNU35n8ydAFRWoGkiAu3l18uJig3SXPzWFKy8DFbfGIRalHRiVMPbkmq3kcXrpui41NIRK0b8i93MuY71/YdSzrbhFaWZHYax6zOoaPluZhWsx1TRjRo9QGtCyavx08+kx+xaFSEn68QfisPJJGt9KqjWMRA+5EZtilPczRp2XvlnL66u8MRDiqFX+0MVM+Zew71PxnPq6AVmDNdo2/htu5Z+ZBn3L9++hNDBoW9xO7rTLjtuTkhuhKg0xIlcxY3ZN9wDzk5cBreIOSypR3FxswZ1PDJ0/TMUNOKc0fKSfajJ38MMCLNE9HlR9TSf9Pn+0j11g3buR1HkBCSaDTgrQcQQttpkoAE1y+66gJXGQjp1FHVXbGu9Xf+zikikaisD12rr02Koq2P6Oj7SdfcFhSOTBQzxmZUrpM1jDyIHQFXJAste0ZVCoeRmIzUc5FPHO1hhJfrxtHDVXdZL5mqV14xc8ixUfSHKWbMjV5goZ5pjvOq/Ib/9LNP6n1Ll2QY1ENe3TfjIFWhxFhBw3foaolOefbEhjSVwkTH6X4d17PE3CLChc9/m4vOzoQ==";

Я преобразовал открытый ключ в шестнадцатеричный, используя https://cryptii.com/pipes/base64-to-hex

Открытый ключ как шестнадцатеричный:

0602000000a40000525341310010000001000100bd7a2f3298f86eeb9d2320bab0307914b2206580df574f5e10d6059431c3a8b306a20e657d15c1f43668552b4860cba7160a8804e79024b3385a5ad9aa77fc79c221ed9d898aab1c8d3fc06be0f94ec6c4f7af98ac354df99fcc9d005456a0692202ede5d7cb898a0dd25cfcd614acbc0c56df18845a94746254c3db926ab791c5eba6e8b8d4d2112b46fc8bddccb98ef5fd8752ceb6e115a5991d86b1eb33a868f96e6615acc754d18d1a3d406b42c9abf1d3cfa4c7ec5a152127ebc41f8ac3c9246b7d2aa8d631103ee4466d8a53dccd1a765ef9672faeaef0c4438aa157fb431533e65ec3bd4fc673eae805660cd768dbf86dbb967e6419f72fdfbe84d0c1a16f713bbad32e3b6e4e486e84a834c4895cc58dd937dc03ce4e5c06b788392ca9477171b306753c3274fd331434e29cd1f2927da8c9dfc30c08b344f47951f5349ff4f9fed23d758376ee4751e404249a0d382b41c410b6da64a00135cbeeba8095c6423a751475576c6bbd5dffb38a48a46a2b03d76aebd362a8ab63fa3a3ed275f705852393050cf199952ba4cd630f22074055c902cb5ed19542a1e46623351ce453c73b586125faf1b470d55dd64be66a95d78c5cf22c547d21ca59b323579828679a63bceabf21bffd2cd3fa9f52e5d9063510d7b74df8c8156871161070ddfa1aa2539e7db1218d25709131fa5f8775ecf13708b0a173dfe6e2f3b3a1

Я использовал следующее Демонстрационное шифрование RSA-кода для JavaScript и вставил шестнадцатеричную версию открытого ключа в модуль (hex). Для входного значения test я получил следующий результат base 64:

VunHUEkouPnoR+/R2lJukPKRoAuI2+cuwCy32+qnWRDYhJad5EIHa1k0PB5XatOYH20MGR5V/O7mYAiRAlBt3RuvRMQ3p2TgYxAW9LFOIQ0NePyHeNtCrU4IXQuwqUqA9pk50UQy0QKciWZPE+WhJpeGaW0CWm+fKd4caUX10P8=

Вопросы

Это допустимое зашифрованное значение? Может ли это быть успешно расшифровано как test?

Я создал следующую C # программу для дешифрования с использованием закрытого ключа пары ключей. Но я получаю исключение, говорящее:

Плохие данные

Как мне это исправить?

C # Код расшифровки

static void Main(string[] args)
{
    string encryptionResult = "VunHUEkouPnoR+/R2lJukPKRoAuI2+cuwCy32+qnWRDYhJad5EIHa1k0PB5XatOYH20MGR5V/O7mYAiRAlBt3RuvRMQ3p2TgYxAW9LFOIQ0NePyHeNtCrU4IXQuwqUqA9pk50UQy0QKciWZPE+WhJpeGaW0CWm+fKd4caUX10P8="; 
    string privateKey = "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";

    byte[] byteArrayRSAEncrypted = null;
    string newDecryptedResultFromRSA = String.Empty;

    try
    {
        byteArrayRSAEncrypted = Convert.FromBase64String(encryptionResult);
        string byteArrayRSAEncryptedResult = System.Text.Encoding.Unicode.GetString(byteArrayRSAEncrypted);

        newDecryptedResultFromRSA = Custom_Decrypt(privateKey, byteArrayRSAEncrypted);
        Console.WriteLine("Decrypted Result: " + newDecryptedResultFromRSA);
    }
    catch(Exception ex)
    {
        string messageText = ex.Message;
        Console.WriteLine("Input is not in correct Base 64 encoded format");
    }

    Console.WriteLine("  ");
    Console.Read();

}

public static string Custom_Decrypt(string privateKey, byte[] encryptedBytes)
{
    System.Security.Cryptography.CspParameters cspParams = new System.Security.Cryptography.CspParameters { ProviderType = 1 };
    System.Security.Cryptography.RSACryptoServiceProvider rsaProvider = new System.Security.Cryptography.RSACryptoServiceProvider(cspParams);

    rsaProvider.ImportCspBlob(Convert.FromBase64String(privateKey));

    byte[] plainBytes = rsaProvider.Decrypt(encryptedBytes, false);

    string plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length);

    return plainText;
}

Генерация пары ключей - C #

  public static Tuple<string, string> RCOA_CreateKeyPair()
    {
        System.Security.Cryptography.CspParameters cspParams = new System.Security.Cryptography.CspParameters { ProviderType = 1 };

        System.Security.Cryptography.RSACryptoServiceProvider rsaProvider = new System.Security.Cryptography.RSACryptoServiceProvider(4096, cspParams);
        //1024 was original size

        string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); //Public Key is Base 64 Encoded
        string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true)); //Private Key is Base 64 Encoded

        return new Tuple<string, string>(privateKey, publicKey);
    }
...