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 кода называется? Чем отличается? Кака использовать? Какой это может быть стандарт?
- каким образом понять когда какая сигнатура? Всмысле если я получатель и вижу такие сигнатуры, то как понять?
Обясните мне пожалуйста.