если вы видите этот текст, отключите в настройках форума использование JavaScript
Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания .
Новичкам также крайне полезно ознакомиться с данным документом .
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
А посмотреть как это делается в самом crypto++? 17.04.06 17:55 Число просмотров: 2854
Автор: amirul <Serge> Статус: The Elderman
> Ребята. Помогите пожалуйста разобраться с библиотекой > Crypto++. Хотябы на примере реализации RSA. Может быть, > где-то есть man по функциям этой библиотеки?
Выдержка из cryptopp/src/test.cpp (http://cvs.sourceforge.net/viewcvs.py/cryptopp/src/test.cpp?view=markup)
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed)
{
RandomPool randPool;
randPool.Put((byte *)seed, strlen(seed));
RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength);
HexEncoder privFile(new FileSink(privFilename));
priv.DEREncode(privFile);
privFile.MessageEnd();
RSAES_OAEP_SHA_Encryptor pub(priv);
HexEncoder pubFile(new FileSink(pubFilename));
pub.DEREncode(pubFile);
pubFile.MessageEnd();
}
char *RSAEncryptString(const char *pubFilename, const char *seed, const char *message)
{
FileSource pubFile(pubFilename, true, new HexDecoder);
RSAES_OAEP_SHA_Encryptor pub(pubFile);
if (strlen(message) > pub.MaxPlainTextLength())
{
cerr << "message too long for this key\n";
abort();
}
RandomPool randPool;
randPool.Put((byte *)seed, strlen(seed));
char *outstr = new char[2*pub.CipherTextLength()+1];
pub.Encrypt(randPool, (byte *)message, strlen(message), (byte *)outstr);
HexEncoder hexEncoder;
hexEncoder.Put((byte *)outstr, pub.CipherTextLength());
hexEncoder.MessageEnd();
hexEncoder.Get((byte *)outstr, 2*pub.CipherTextLength());
outstr[2*pub.CipherTextLength()] = 0;
return outstr;
}
char *RSADecryptString(const char *privFilename, const char *ciphertext)
{
FileSource privFile(privFilename, true, new HexDecoder);
RSAES_OAEP_SHA_Decryptor priv(privFile);
HexDecoder hexDecoder;
hexDecoder.Put((byte *)ciphertext, strlen(ciphertext));
hexDecoder.MessageEnd();
SecByteBlock buf(priv.CipherTextLength());
hexDecoder.Get(buf, priv.CipherTextLength());
char *outstr = new char[priv.MaxPlainTextLength()+1];
unsigned messageLength = priv.Decrypt(buf, (byte *)outstr);
outstr[messageLength] = 0;
return outstr;
}
void RSASignFile(const char *privFilename, const char *messageFilename, const char *signatureFilename)
{
FileSource privFile(privFilename, true, new HexDecoder);
RSASSA_PKCS1v15_SHA_Signer priv(privFile);
NullRNG rng; // RSASSA_PKCS1v15_SHA_Signer ignores the rng. Use a real RNG for other signature schemes!
FileSource f(messageFilename, true, new SignerFilter(rng, priv, new HexEncoder(new FileSink(signatureFilename))));
}
bool RSAVerifyFile(const char *pubFilename, const char *messageFilename, const char *signatureFilename)
{
FileSource pubFile(pubFilename, true, new HexDecoder);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
FileSource signatureFile(signatureFilename, true, new HexDecoder);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size);
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->PutSignature(signature);
FileSource f(messageFilename, true, verifierFilter);
byte result = 0;
f.Get(result);
return result == 1;
}
---
<beginners >
Crypto++ 17.04.06 14:21
Автор: Goth Статус: Незарегистрированный пользователь
Ребята. Помогите пожалуйста разобраться с библиотекой Crypto++. Хотябы на примере реализации RSA. Может быть, где-то есть man по функциям этой библиотеки?
А посмотреть как это делается в самом crypto++? 17.04.06 17:55
Автор: amirul <Serge> Статус: The Elderman
> Ребята. Помогите пожалуйста разобраться с библиотекой > Crypto++. Хотябы на примере реализации RSA. Может быть, > где-то есть man по функциям этой библиотеки?
Выдержка из cryptopp/src/test.cpp (http://cvs.sourceforge.net/viewcvs.py/cryptopp/src/test.cpp?view=markup)
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed)
{
RandomPool randPool;
randPool.Put((byte *)seed, strlen(seed));
RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength);
HexEncoder privFile(new FileSink(privFilename));
priv.DEREncode(privFile);
privFile.MessageEnd();
RSAES_OAEP_SHA_Encryptor pub(priv);
HexEncoder pubFile(new FileSink(pubFilename));
pub.DEREncode(pubFile);
pubFile.MessageEnd();
}
char *RSAEncryptString(const char *pubFilename, const char *seed, const char *message)
{
FileSource pubFile(pubFilename, true, new HexDecoder);
RSAES_OAEP_SHA_Encryptor pub(pubFile);
if (strlen(message) > pub.MaxPlainTextLength())
{
cerr << "message too long for this key\n";
abort();
}
RandomPool randPool;
randPool.Put((byte *)seed, strlen(seed));
char *outstr = new char[2*pub.CipherTextLength()+1];
pub.Encrypt(randPool, (byte *)message, strlen(message), (byte *)outstr);
HexEncoder hexEncoder;
hexEncoder.Put((byte *)outstr, pub.CipherTextLength());
hexEncoder.MessageEnd();
hexEncoder.Get((byte *)outstr, 2*pub.CipherTextLength());
outstr[2*pub.CipherTextLength()] = 0;
return outstr;
}
char *RSADecryptString(const char *privFilename, const char *ciphertext)
{
FileSource privFile(privFilename, true, new HexDecoder);
RSAES_OAEP_SHA_Decryptor priv(privFile);
HexDecoder hexDecoder;
hexDecoder.Put((byte *)ciphertext, strlen(ciphertext));
hexDecoder.MessageEnd();
SecByteBlock buf(priv.CipherTextLength());
hexDecoder.Get(buf, priv.CipherTextLength());
char *outstr = new char[priv.MaxPlainTextLength()+1];
unsigned messageLength = priv.Decrypt(buf, (byte *)outstr);
outstr[messageLength] = 0;
return outstr;
}
void RSASignFile(const char *privFilename, const char *messageFilename, const char *signatureFilename)
{
FileSource privFile(privFilename, true, new HexDecoder);
RSASSA_PKCS1v15_SHA_Signer priv(privFile);
NullRNG rng; // RSASSA_PKCS1v15_SHA_Signer ignores the rng. Use a real RNG for other signature schemes!
FileSource f(messageFilename, true, new SignerFilter(rng, priv, new HexEncoder(new FileSink(signatureFilename))));
}
bool RSAVerifyFile(const char *pubFilename, const char *messageFilename, const char *signatureFilename)
{
FileSource pubFile(pubFilename, true, new HexDecoder);
RSASSA_PKCS1v15_SHA_Verifier pub(pubFile);
FileSource signatureFile(signatureFilename, true, new HexDecoder);
if (signatureFile.MaxRetrievable() != pub.SignatureLength())
return false;
SecByteBlock signature(pub.SignatureLength());
signatureFile.Get(signature, signature.size);
VerifierFilter *verifierFilter = new VerifierFilter(pub);
verifierFilter->PutSignature(signature);
FileSource f(messageFilename, true, verifierFilter);
byte result = 0;
f.Get(result);
return result == 1;
}
---
Еще вопрос 18.04.06 16:32
Автор: Goth Статус: Незарегистрированный пользователь
Помогите настроить Crypto++, а то при компиляции test.cpp вылазят ошибки.
Гугль на запрос "crypto++ tutorial" первой же ссылкой... 18.04.06 17:15
Автор: amirul <Serge> Статус: The Elderman
> Помогите настроить Crypto++, а то при компиляции test.cpp > вылазят ошибки.
Гугль на запрос "crypto++ tutorial" первой же ссылкой выдает
http://www.bitvise.com/downloads/CryptoPPGuide.chm
Хоть и для 4-й версии, но 5-я отличается в основном названиями, а базовые принципы - те же.