带恢复功能的 BouncyCastle RSA 概率签名方案
BouncyCastle RSA Probabilistic Signature Scheme with Recovery
以下代码带有recovery签名消息,如何用C#BouncyCastle实现?
std::vector<unsigned char> data{ 1,2,3,4,5,6 };
CryptoPP::AutoSeededRandomPool rng;
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 2048);
CryptoPP::RSA::PrivateKey privateKey(params);
CryptoPP::RSA::PublicKey publicKey(params);
CryptoPP::RSASS<CryptoPP::PSSR, CryptoPP::SHA1>::Signer signer(privateKey);
CryptoPP::SecByteBlock signature(signer.MaxSignatureLength(data.size()));
unsigned long signatureLen = signer.SignMessageWithRecovery(rng, &data[0],
data.size(), NULL, 0, signature);
std::vector<unsigned char> encrypted;
encrypted.assign(signatureLen, 0);
memcpy(&encrypted[0], signature.m_ptr, signatureLen);
我认为 Iso9796d2PssSigner
class in the Org.BouncyCastle.Crypto.Signers
命名空间应该可以满足您的需求。您可以在 ISO9796Test.cs.
的来源中找到使用示例
以下代码带有recovery签名消息,如何用C#BouncyCastle实现?
std::vector<unsigned char> data{ 1,2,3,4,5,6 };
CryptoPP::AutoSeededRandomPool rng;
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 2048);
CryptoPP::RSA::PrivateKey privateKey(params);
CryptoPP::RSA::PublicKey publicKey(params);
CryptoPP::RSASS<CryptoPP::PSSR, CryptoPP::SHA1>::Signer signer(privateKey);
CryptoPP::SecByteBlock signature(signer.MaxSignatureLength(data.size()));
unsigned long signatureLen = signer.SignMessageWithRecovery(rng, &data[0],
data.size(), NULL, 0, signature);
std::vector<unsigned char> encrypted;
encrypted.assign(signatureLen, 0);
memcpy(&encrypted[0], signature.m_ptr, signatureLen);
我认为 Iso9796d2PssSigner
class in the Org.BouncyCastle.Crypto.Signers
命名空间应该可以满足您的需求。您可以在 ISO9796Test.cs.