字节 * 密码 = 新字节(大小);
我认为这应该是:
byte * cipher = new byte[size];
否则,我认为您将一个字节初始化为 6400(被截断为 0x00)。
CryptoPP::ArraySink * test = new CryptoPP::ArraySink(cipher, size);
这有点不同。如果您愿意,可以远离内存管理器:
CryptoPP::ArraySink test(cipher, size);
int newDataSize = test->TotalPutLength();
我从未使用过TotalPutLength
,也没有看到它记录在 aBufferedTransformation
或Sink
. 所以我对它的回归没有任何建议。
TotalPutLength
可以使用。如果接收器已满,AnArraySink
可能会返回错误的值。如果数组是固定的并且对于所有数据来说太小,就会发生这种情况。我们在 Crypto++ 5.6.3 或 5.6.4 中清除了该问题。
如果要计算处理的字节数(即使接收器无法存储它们的字节),也可以使用MeterFilter
:
byte data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
string encoded;
MeterFilter meter( new StringSink( encoded ) );
ArraySource( data, sizeof( data ), true,
new HexEncoder(
new Redirector( meter ),
true /*UCase*/, 2 /*Group*/,
" " /*Separator*/
)
);
cout << "processed " << meter.GetTotalBytes() << " bytes" << endl;
cout << encoded << endl;
输出:
Processed 23 bytes
00 01 02 03 04 05 06 07
如何使用 Cryptopp RSA 实现加密字节数组
现在我们正在谈论 ;) 从 Crypto++ wiki 上的RSA 加密试试这个。
////////////////////////////////////////////////
// Generate keys
AutoSeededRandomPool rng;
InvertibleRSAFunction params;
params.GenerateRandomWithKeySize( rng, 1536 );
RSA::PrivateKey privateKey( params );
RSA::PublicKey publicKey( params );
string plain="RSA Encryption", cipher, recovered;
////////////////////////////////////////////////
// Encryption
RSAES_OAEP_SHA_Encryptor e( publicKey );
StringSource ss1( plain, true,
new PK_EncryptorFilter( rng, e,
new StringSink( cipher )
) // PK_EncryptorFilter
); // StringSource
////////////////////////////////////////////////
// Decryption
RSAES_OAEP_SHA_Decryptor d( privateKey );
StringSource ss2( cipher, true,
new PK_DecryptorFilter( rng, d,
new StringSink( recovered )
) // PK_DecryptorFilter
); // StringSource
assert( plain == recovered );