Signature C# вопрос какие различия между System.Security.Cryptography.Pkcs и System.Security.Cryptography

Я иммею такие коды:

1)

 public byte[] SignData(byte[] dataBytes, string privateKeyPath, string passphrase)
 {
     byte[] signature;
     ContentInfo content = new ContentInfo(dataBytes);

     SignedCms signedCms = new SignedCms(content, true);

     CmsSigner signer = new CmsSigner(new X509Certificate2(privateKeyPath, passphrase));

     // Set the hash algorithm to SHA256
     signer.DigestAlgorithm = new Oid("2.16.840.1.101.3.4.2.1");

     // Include the algorithm identifier protection attribute
     signer.IncludeOption = X509IncludeOption.WholeChain;

     signedCms.ComputeSignature(signer);

     signature = signedCms.Encode();

     return signature;
 }

и

2)

        public byte[] SignData(byte[] dataBytes, string privateKeyPath, string passphrase)
        {
            byte[] signature;
            using (var certificate = new X509Certificate2(privateKeyPath, passphrase))
            {
                using (RSA rsa = certificate.GetRSAPrivateKey())
                {
                    signature = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
                }
            }
            return signature;
        }

или такой

3)

        public byte[] SignData(byte[] dataBytes, string privateKeyPath, string passphrase)
        {

            byte[] signature;
            using (FileStream fs = new FileStream(privateKeyPath, FileMode.Open))
            {
                Pkcs12Store pkcs12Store = new Pkcs12Store(fs, passphrase.ToCharArray());

                string alias = null;
                foreach (string storeAlias in pkcs12Store.Aliases)
                {
                    if (pkcs12Store.IsKeyEntry(storeAlias))
                    {
                        alias = storeAlias;
                        break;
                    }
                }

                // Get the private key and certificate from the PFX file
                AsymmetricKeyEntry privateKey = pkcs12Store.GetKey(alias);
                X509CertificateEntry certificateEntry = pkcs12Store.GetCertificate(alias);

                // Create a signer
                ISigner signer = SignerUtilities.GetSigner("SHA256withRSA");

                // Initialize the signer with the private key
                signer.Init(true, privateKey.Key);



                // Sign the data
                signer.BlockUpdate(dataBytes, 0, dataBytes.Length);
                signature = signer.GenerateSignature();

            }


            return signature;

        }

И теперь если я использую алгоритм для генерирования из .pfx файла в котором лежит private key (RSA) + сертификат. Он мне генерирует большую сигнатуру.

Если использую 2 или 3 Этот код генерирует меньшую сигнатуру.

Какая разница между 1 и 2,3 кодами?

Типа как сигнатура из 1 кода называется? Чем отличается? Кака использовать? Какой это может быть стандарт?

  • каким образом понять когда какая сигнатура? Всмысле если я получатель и вижу такие сигнатуры, то как понять?

Обясните мне пожалуйста.


Ответы (0 шт):