OpenSSL库过于庞大,一个exe静态链接后,会变成2MB。于是寻找别的算法库。最后找到了Crypto++。程序编译后,Release版本只会增大200KB,还是很不错的。
cryptest中的代码,会自动把二进制转为字符串,很让人头大。幸好找到了以Crypto++实现RSA加解密二进制数据,讲解了二进制操作的方法。
因为那篇文章已经有几年历史,有几个API有一些变动。
生产RSA密钥对(默认4096):
#include <randpool.h>
#include <files.h>
#include <rsa.h>
void GenerateRSAKey(uint8_t* pSeed, uint64_t u64SeedLen, uint8_t* pPrivateKey, uint64_t& u64PrivateKeyLen, uint8_t* pPublicKey, uint64_t& u64PublicKeyLen)
{
CryptoPP::RandomPool randomPool;
randomPool.IncorporateEntropy(pSeed, (size_t)u64SeedLen);
CryptoPP::RSAES_OAEP_SHA_Decryptor decryptor(randomPool, 4096);
CryptoPP::ArraySink decArr(pPrivateKey, (size_t)u64PrivateKeyLen);
decryptor.AccessMaterial().Save(decArr);
decArr.MessageEnd();
u64PrivateKeyLen = decArr.TotalPutLength();
CryptoPP::RSAES_OAEP_SHA_Encryptor encryptor(decryptor);
CryptoPP::ArraySink encArr(pPublicKey, (size_t)u64PublicKeyLen);
encryptor