Bonjour
J'ai créé une fonction
void CreateRC4Key(unsigned char* hashedMsg, int sizeMsg, unsigned char** hKey, int* sizeKey);
qui me renvoit sans problème une clé de session créée à partir d'un password hashé (un key BLOB ou un unsigned char*).
Ensuite j'ai une fonction
void EncryptRC4(unsigned char* msg, int* sizeMsg, unsigned char* key, int* sizeKey, unsigned char** out)
qui crypte un message grâce à cette clé sans problème !
Le problème vient du fait que mon algorithme de cryptage PDF me demande d'appeler 19 fois en boucle cette méthode (output devient input) en changeant la clé à chaque itération.
la modification à apporter à la clé est la suivante :
"use an encryption key generated by taking each byte of the encryption key obtained first and performing a XOR operation between that byte and the single-byte value of the iteration counter (from 1 to 19)"
Algo qui vient du Pdf Reference 1.5 pgf 101 algo 3.3 :
http://partners.adobe.com/public/dev...rence15_v6.pdf
(attention le fichier pdf fait plus de 1000 pages donc faire un "save as")
Donc mon problème est le suivant :
- Comment modifier correctement la clé de cryptage ?
(j'ai cru comprendre qu'il y avait un header à ne pas modifier)
j'ai essayé de le faire mais je n'ai pas réussi à isoler les bytes "utiles" de la clé à modifier et j'ai donc tout modifié, ce qui donne
1 2 3 4 5
| for (int i = 1; i <= 19; i++)
{
for (int j = 0; j < sizeKey ; j++)
((BYTE*)newKey)[j] = ((BYTE*)key)[j] ^ ((BYTE*)&i)[0];
} |
Le résultat est que la fonction CryptImportKey ne fonctionne plus du tout
Merci d'avance
(en espérant que cette fois ma question est plus sensée )
Partager