[英]What do I wrong? Botan & QT & SHELL decrypting
首先我创建我的唱歌键:(Shell/Debian 9)
>openssl genrsa -out ./priv.rsa 2048
>openssl pkcs8 -topk8 -inform PEM -outform PEM -in ./priv.rsa -out priv.pem
>openssl rsa -in ./priv.pem -pubout -out pub.pem
然后我用(Shell)创建我的 encrypt.txt
> echo "ęśłżół">encrypt.txt
并使用我的公共 Rsa 密钥(Shell)对其进行加密
> openssl rsautl -encrypt -inkey ./pub.pem -pubin -in ./encrypt.txt -out
> ./encrypt.dat
..然后是带有QT(5.9.1)的Botan(昨天下载):
...
使用命名空间 Botan;
使用 std::string;
QFile file,file2;
// Reading private key
file.setFileName(".../priv.pem");
file.open(QIODevice::ReadOnly);
QByteArray f = file.readAll();
file.close();
//reading encrypted file
file2.setFileName("...../encrypt.dat");
file2.open(QIODevice::ReadOnly);
QByteArray f2 = file2.readAll();
file2.close();
enter code here
std::vector<uint8_t> ct;
for(QByteArray::Iterator it = f2.begin();it!=f2.end();it++)
{
ct.push_back((uint8_t)(*it));
}
string password=ui->lineEdit_2->text().toStdString().c_str();
std::unique_ptr<Botan::RandomNumberGenerator> rng(new Botan::AutoSeeded_RNG);
DataSource_Memory keyData2( f.toStdString().c_str() );
std::unique_ptr<Private_Key> kp = PKCS8::load_key(keyData2,pass);
PK_Decryptor_EME dec(*kp,*rng.get(), "Raw");
secure_vector<uint8_t> ct4=dec.decrypt(ct);
QByteArray aaa;
for(secure_vector<uint8_t>::iterator it=ct4.begin();it!=ct4.end();it++)
{
aaa+=(uint8_t)(*it);
}
QFile fileX(".../encryptE.txt");
fileX.open(QIODevice::WriteOnly);
fileX.write(aaa);
fileX.close();
...我的输出文件包含(并且是 255 字节宽):
^B4 x ^V & 赭绹 *S ^T 㓠K 7 J CF^U^B^[ ^Q =^H + 7Y^^^U ^^O\\ v bdK^N^Ev^QI= ) ) n^KПV Y -23^^ 5] ^ ^P4 ^L p i t^D ^Z J^K ^G^Z^\\ 4\\^D^Z^Ew^Tx S i 5 ^D A Ƨ o zÚ # ^L ^G Ŋ^FXIu ^@ęśłżół
我的问题: 1. ...我看到我的字符串:ęśłżół ....但我有什么错? - 解码文件不是原始文件?
PK_Decryptor_EME dec(*kp,*rng.get(), "Raw");
如果我选择:PKCS1v15” || “EME-PKCS1-v1_5” “OAEP” || “EME-OAEP” || “EME1” || “EME1(SHA-1)” || “EME1(SHA-256)”
我变成了错误:
在抛出'Botan::Decoding_Error' what() 实例后调用终止:参数无效解码错误:公钥密文无效,无法解密
OpenSSL 默认使用安全性较低的PKCS#1 v1.5 填充。 要使用相同的取消填充,您可能应该在 Botan 中使用"PKCS1v15"
。
请注意,PKCS#1 v1.5 容易受到 Bleichenbacher(填充预言机)攻击,因此应谨慎使用 PKCS#1 v1.5 填充(即不要在可以充当填充预言机的自动化系统中)。
建议使用 OAEP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.