Расшифровать зашифрованную строку RSA с закрытым ключом PGP - PullRequest
1 голос
/ 19 сентября 2019

Мне трудно заставить это работать.Мне дали частный ключ PGP для расшифровки файла.Нет проблем.Это отлично работает.Однако мне нужно использовать этот же закрытый ключ для расшифровки зашифрованной строки RSA (зашифрованной с тем же открытым ключом, что и файл), и я изо всех сил пытаюсь заставить его работать.Я не могу прочитать ключ PGP из файла и преобразовать его во что-либо пригодное для дешифрования RSA.Текущая ошибка, которую я получаю:

unknown tag 13 encountered

Шифрование / дешифрование строк, которое я пытаюсь использовать, было заимствовано из здесь и преобразовано из Java в C #.На данный момент я пытаюсь проверить шифрование и дешифрование моей собственной строки

public static string EncryptS( string publicKeyFilename, string inputData )
{
    string encryptedData = null;
    try
    {
        //Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider() );

        byte[] key = File.ReadAllBytes( publicKeyFilename );
        AsymmetricKeyParameter publicKey = PublicKeyFactory.CreateKey( key );
        Pkcs1Encoding e = new Pkcs1Encoding( new RsaEngine() );
        e.Init( true, publicKey );

        byte[] messageBytes = Encoding.UTF8.GetBytes( inputData );
        byte[] hexEncodedCipher = e.ProcessBlock( messageBytes, 0, messageBytes.Length );

        // This was a hex encoded string...
        encryptedData = Convert.ToBase64String( hexEncodedCipher );
    }
    catch ( Exception e )
    {
    }

    return encryptedData;
}

public static string DecryptS( string privateKeyFilename, string encryptedData )
{
    String outputData = null;
    try
    {
        byte[] key = File.ReadAllBytes( privateKeyFilename );
        AsymmetricKeyParameter privateKey = PrivateKeyFactory.CreateKey( key );

        Pkcs1Encoding e = new Pkcs1Encoding( new RsaEngine() );
        e.Init( false, privateKey );

        byte[] messageBytes = Convert.FromBase64String( encryptedData ); // May need to be converted from a hex encoded string instead of b64
        byte[] hexEncodedCipher = e.ProcessBlock( messageBytes, 0, messageBytes.Length );

        outputData = hexEncodedCipher.ToString();
    }
    catch ( Exception e )
    {
    }

    return outputData;
}

Так выглядит закрытый ключ (для краткости строки удалены).

-----BEGIN PGP PRIVATE KEY BLOCK-----

lQOYBF1wF3IBCAC4gg6Q355wn7o5odhMBErn6Nkk1fX8mgHtoNUbbp4YgEXwlB3y
0DK1vr9SFz1ZJ8IYuQ4YUDhSkVpaSgU8GW1HCsKKSgmHHTJ6FqUcE7Xii69XXeIu
vKMF+rcwVXLLlw5adPu/pLQDWCcll/tK+0E0Dmcj606XBNDn3zvvx6pzVKxODrdE
Zv0m/qDSA8feB17WH6k0opRCt5CPV47iigXVWOBh/SnussDe4qhkQ2vS8WojubWn
blSbC/c/AMwpVZT4HALP8t+bF2IxFVgYDeOPlZJhK63LUyXFcRQBcVUMHSyUI19i
wqZV/0qPGQzdK3y7
=M/Yn
-----END PGP PRIVATE KEY BLOCK-----

Я думал, что все ключи RSA были созданы равными ....

Так можно ли использовать закрытый ключ PGP для расшифровки строки, зашифрованной RSA?Если да, может кто-нибудь указать мне правильное направление, чтобы заставить его работать?

...