Как подписать зашифрованное сообщение PGP с SHA1, используя bouncyCastle in. NET - PullRequest
0 голосов
/ 20 февраля 2020

Кто знаком с сообщением pgp. Я пытался подписать этот код, но получил неправильный результат. Я могу дать вам дополнительную информацию, если это необходимо.

using Org.BouncyCastle.Bcpg;
using Org.BouncyCastle.Bcpg.OpenPgp;

    public static string Sign(string data, PgpSecretKey pgpSecretKey, char[] pass)
        {
            bool isCertain = true;
            var input = Encoding.ASCII.GetBytes(data);
            MemoryStream memoryStream = new MemoryStream(input);
            ArmoredInputStream aIn = new ArmoredInputStream(memoryStream);
            MemoryStream sout = new MemoryStream();

            PgpPrivateKey pgpPrivateKey = pgpSecretKey.ExtractPrivateKey(pass);
            PgpSignatureGenerator sGen = new 
            PgpSignatureGenerator(pgpPrivateKey.PublicKeyPacket.Algorithm, HashAlgorithmTag.Sha1);
            PgpSignatureSubpacketGenerator spGen = new PgpSignatureSubpacketGenerator();
            sGen.InitSign(PgpSignature.CanonicalTextDocument, pgpPrivateKey);
            byte[] line = LineSeparator;
            spGen.Generate();
            ArmoredOutputStream aOut = new ArmoredOutputStream(sout);

            aOut.BeginClearText(HashAlgorithmTag.Sha1);           

            MemoryStream lineOut = new MemoryStream();
            int lookAhead = ReadInputLine(lineOut, aIn);

            ProcessLine(aOut, sGen, lineOut.ToArray());
            if (lookAhead != -1)
            {
                do
                {
                    lookAhead = ReadInputLine(lineOut, lookAhead, aIn);
                    sGen.Update((byte)'\r');
                    sGen.Update((byte)'\n');
                    ProcessLine(aOut, sGen, lineOut.ToArray());
                } while (lookAhead != -1);
            }
            aOut.EndClearText();
            BcpgOutputStream bOut = new BcpgOutputStream(aOut);
            sGen.Generate().Encode(bOut);
            aOut.Close();

            byte[] asap = sout.ToArray();

            string converted = Encoding.ASCII.GetString(asap, 0, asap.Length);         

            return converted;
        }

Подписанное сообщение выглядит следующим образом

-----BEGIN PGP SIGNED MESSAGE-----\r\nHash: SHA1\r\n\r\n�\u0002\u000e\u0003��?>����\u0010\a�5�Z2>:\u0014h�̌\u0011M$Ua\b\u0018*����X��һ\u0013\n�\u001a�~s� |�m��Z����\f\n\u0011�4\a�\u0015۶��r�\u001c�1\b\f�yǟ\u000ex���(��\u007f�^\0�z�}��,\f,�s��v\tR����*��,s�ѱ��2^Lh\u0012�x\u001aw�,�a_a���y&3=������j����4l5@�=��V����ۻS���˷\u001bo\u0003�xs\u0004����(��c�]7�s_�M�\u0003��4W&��u\u001a��2<W\0�؛�\u001d�\u0006dS�R�\u000f���-\u001d�@��\u0019K'��V\u0012t�~�]��>XH�^�l\b\0�zK��'��Z\n_�iS���U�o�S�L���2�u#�}\u0012�E��#WR4��(eD�\\���F��Hr��GX\u001a��K��\u0019vjU�Ȋ��m\b�����{rXr��*��n��j�l��%��\u0015X�J��\r\v�7R\u0012[�(�B����q�?)HrQ����\u0018�\0��C��\u0014��ځ\u007f��n/�b�/��\u0018���1a�g[\u0014Ѝ*u/�\"�\u0003z8w��Sa��\u0005\vG���~ħl���F� \u0001��&�D�ތ��_�Y�0 b\r�?#\u0017\u001b\u0019;��&\n�@E�Q���h�\u001e\u0003\u0002��9҈\u0001E�U&��̚�\rwp���V �\u0004\u001c�C��U\u0004�n�\aX��\tڂ��Q�K\u001a\u0015���\v�B\u0006Pƅ��\"3'�GF��]�D��7�E��gېzHF����TԐb�8�<\u0005\u000f�nW|��_���?t�ˎt�\u0004��0h݁}\0�\u001d\u001e���\u0015r�O\f�-----BEGIN PGP SIGNATURE-----\r\nVersion: BCPG C# v1.8.5.0\r\n\r\niEYEARECAAYFAl5OftYACgkQflHkxBbbB4WI4gCffVMNrdwTl2G/OiDA5jd1Fjqc\r\nkmoAnis0W579VZ+fI28eGpM7OrKW"
...