2017-10-16 12 views
2

premier décryptage je crée mes clés de chant: (Shell/Debian 9)Qu'est-ce que je me trompe? Botan & 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 

Alors je ceate mon encrypt.txt avec (Shell)

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

et crypte avec ma clé publique Rsa (Shell)

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

.. et que vient Botan (dowloaded hier) avec QT (5.9.1):

...

en utilisant l'espace de noms Botan;

en utilisant 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(); 

... et mon dossier Out contient (et 255 octets de large):

^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��^@ęśłżół

Mes questions: 1. ... je vois ma chaîne: ęśłżół .... mais qu'est-ce que je me trompe? - le fichier décodé n'est pas original?

  1. I'is autorisés à utiliser mon genre RAW que comme (pour ce fichier: encrpted.dat):

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

si je choisis: PKCS1v15” || "EME-PKCS1-v1_5" "OAEP" || "EME-OAEP" || "EME1" || "EME1 (SHA-1)" || « Eme1 (SHA-256) »

i devienne erreur:

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

+1

Doit être '" "PKCS1v15" '. Quelle est la taille du texte chiffré? –

+0

@MaartenBodewes Merci, ça marche !!!! ps. puis-je utiliser les clés PGP avec cette bibliothèque? je ne sais pas comment changer la clé openpgp (publique/priv) en clés RSA ... j'ai trouvé l'outil gpgsm, mais comand --export-secret-key-p12 ne fonctionne plus ... – blackmoon

+0

En effet, seulement après conversion de clé - PGP utilise son propre format de conteneur de clé. Il devrait y avoir plusieurs outils capables d'exporter les clés PKCS # 8 ou PKCS # 12. Il est toutefois déconseillé de mélanger des clés à des fins différentes. En général, vous devriez plutôt créer une nouvelle paire de clés. –

Répondre

1

par défaut OpenSSL au moins sécurisé PKCS # 1 v1.5 rembourrage. Pour utiliser le même unpadding vous devriez probablement utiliser "PKCS1v15" dans Botan. Gardez à l'esprit que PKCS # 1 v1.5 est sensible à l'attaque de Bleichenbacher (padding pad), donc l'utilisation de padding PKCS # 1 v1.5 doit être utilisée avec précaution (pas dans les systèmes automatisés qui peuvent agir comme padding oracle).

L'utilisation d'OAEP est recommandée.