Bonjour,
Est-ce que quelqu'un connaitrait-il un tuto / exemple pour crypter une chaine de caractères en AES avec la class AESCryptoServiceProvider ?
Le but est de crypter un mot passe dans un programme c++.
Merci !
Bonjour,
Est-ce que quelqu'un connaitrait-il un tuto / exemple pour crypter une chaine de caractères en AES avec la class AESCryptoServiceProvider ?
Le but est de crypter un mot passe dans un programme c++.
Merci !
La doc suffit pas ? Il y a pourtant un exemple dedans.
En me basant sur cette doc, j'ai essayé de reproduire le code en C++ mais ca ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 // TestCrypto.cpp*: définit le point d'entrée pour l'application console. // #include "stdafx.h" using namespace System; using namespace System::Security::Cryptography; using namespace System::Text; using namespace System::IO; array<Byte>^ EncryptStringToBytes_Aes(String ^ plainText, array<Byte>^ Key,array<Byte>^ IV) { array<Byte>^ encrypted; // Create an AesCryptoServiceProvider object with the specified key and IV. AesCryptoServiceProvider ^ aesAlg = gcnew AesCryptoServiceProvider; aesAlg->Key = Key; aesAlg->IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform ^ encryptor = aesAlg->CreateEncryptor(aesAlg->Key, aesAlg->IV); // Create the streams used for encryption. MemoryStream ^ msEncrypt = gcnew MemoryStream; CryptoStream ^ csEncrypt = gcnew CryptoStream(msEncrypt, encryptor, CryptoStreamMode::Write); StreamWriter ^ swEncrypt = gcnew StreamWriter(csEncrypt); swEncrypt->Write(plainText); encrypted = msEncrypt->ToArray(); return encrypted; } String ^ DecryptStringFromBytes_Aes(array<Byte>^ cipherText, array<Byte>^ Key, array<Byte>^ IV) { String ^ plaintext = ""; // Create an AesCryptoServiceProvider object with the specified key and IV. AesCryptoServiceProvider ^ aesAlg = gcnew AesCryptoServiceProvider; aesAlg->Key = Key; aesAlg->IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform ^ decryptor = aesAlg->CreateDecryptor(aesAlg->Key, aesAlg->IV); // Create the streams used for encryption. MemoryStream ^ msDecrypt = gcnew MemoryStream(cipherText); CryptoStream ^ csDecrypt = gcnew CryptoStream(msDecrypt, decryptor, CryptoStreamMode::Read); StreamReader ^ srDecrypt = gcnew StreamReader(csDecrypt); plaintext = srDecrypt->ReadToEnd(); return plaintext; } int _tmain(int argc, _TCHAR* argv[]) { String ^ original = "Here is some data to encrypt!"; AesCryptoServiceProvider ^ myAes = gcnew AesCryptoServiceProvider; array<Byte>^ encrypted = EncryptStringToBytes_Aes( original, myAes->Key, myAes->IV) ; String ^ roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes->Key, myAes->IV); Console::WriteLine("Original: {0}\n", original); Console::WriteLine("encrypted: {0}\n", encrypted); Console::WriteLine("Decrypted: {0}\n", roundtrip ); return 0; }
Message d'erreur SVP.j'ai essayé de reproduire le code en C++ mais ca ne fonctionne pas :
Pas d'erreur mais le message décrypté est vide
En effet, c'est bizarre. Je n'ai pas l'habitude d'utiliser les CryptoStream, en général je fais juste un TransformFinalBlock() sur un tableau d'octets...
Peux-tu remplacer la ligne Console::WriteLine("encrypted: {0}\n", encrypted); par:
Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part Console::WriteLine("encrypted: {0} ({1} bytes)\n", encrypted, (encrypted!=nullptr ? encrypted->Length : 0));
PS: Appeler ce langage "C++", c'est comme appeler le langage C++ "C". J'aimerais tant que Microsoft arrête de faire ça et de semer la confusion dans les esprits...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Merci !
J'ai finalement trouvé une solution alternative : https://msdn.microsoft.com/fr-fr/lib...v=VS.110).aspx
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager