2017-10-16 341 views
2

第一創建我歌唱鍵: (殼/ Debian的9)我錯了什麼?牡丹&QT&SHELL解密

>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 

然後我ceate我與 (殼牌)encrypt.txt

> echo "ęśłżół">encrypt.txt 

和隱窩它與我的RSA公鑰 (殼牌)

> openssl rsautl -encrypt -inkey ./pub.pem -pubin -in ./encrypt.txt -out 
> ./encrypt.dat 

..而不是來自牡丹(昨日dowloaded)與QT(5.9.1):

...

使用命名空間牡丹;

using 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]���^\�լ1^U�9n�z萘Å^A��Vr��8�@^C�^S����o��0����S[x� ��2 �^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。 ......我看到我的字符串: ęśłżół....但我錯了什麼? - decodedfile不是原始的嗎?

  • I'is允許我的使用RAW類型只喜歡(此文件:encrpted.dat):

    PK_Decryptor_EME dec(*kp,*rng.get(), "Raw");

  • 如果選用:PKCS1v15」 || 「EME-PKCS1-v1_5」 「OAEP」|| 「EME-OAEP」|| 「EME1」|| 「EME1(SHA-1)」|| 「EME1(SHA-256)」

    我成爲錯誤:

    terminate called after throwing an instance of 'Botan::Decoding_Error' what(): Invalid argument Decoding error: Invalid public key ciphertext, cannot decrypt

    +1

    應該是「PKCS1v15」。密文的大小是多少? –

    +0

    @MaartenBodewes謝謝你,它的作品! PS。我可以用這個庫使用PGP密鑰嗎?我不知道如何將openpgp密鑰(public/priv)更改爲RSA密鑰...我發現了gpgsm工具,但是comand --export-secret-key-p12不再工作... – blackmoon

    +0

    的確,只有在密鑰轉換 - PGP使用自己的密鑰容器格式。應該有多個能夠導出PKCS#8密鑰或PKCS#12密鑰存儲的工具。不同目的的混音鍵雖然不鼓勵,但一般而言,您應該創建一個新的密鑰對。 –

    回答

    1

    OpenSSL的默認爲不太安全 PKCS#1 V1.5填充。要使用相同的無襯墊,您應該在Botan中使用"PKCS1v15"

    請注意,PKCS#1 v1.5可以應對Bleichenbacher(填充oracle)攻擊,因此應謹慎使用PKCS#1 v1.5填充(即不能在自動化系統中充當填充oracle)。

    建議使用OAEP。