Comment utiliser le wrapper OpenSSL.Net C # pour chiffrer une chaîne avec AES?

J’essaie d’envoyer des données chiffrées de mon site SharePoint au site PeopleSoft de mon entreprise. Les gens de PeopleSoft insistent sur le fait que je dois utiliser la bibliothèque OpenSSL pour mon chiffrement. J’ai téléchargé et installé le projet OpenSSL.Net de SourceForge.

Pour mes besoins, je dois simplement chiffrer une chaîne avec AES. Je sais comment faire cela avec la bibliothèque System.Security.Cryptography, mais j’ai beaucoup de difficulté à traduire cela vers OpenSSL.Net. Très frustrant, car je peux voir tout ce dont je pense avoir besoin dans Intellisense!

Quelqu’un a-t-il un exemple d’exécution de chiffrement / déchiffrement de chaîne avec AES à l’aide de l’encapsuleur OpenSSL.Net?

Merci!

-Entaille

Voici l’échantillon qui fonctionne pour moi. Je l’ai simplifié en utilisant un copier-coller, mais cela ne devrait pas avoir d’importance.

J’utilise un mot de passe texte en raison de la compatibilité avec la bibliothèque JS, mais Open SSL lui-même prend en charge l’utilisation directe des octets [] Key et IV, c’est donc vous qui décidez.

Pour basculer les données binarys dans la chaîne, utilisez simplement

Encoding.UTF8.GetBytes() and Encoding.UTF8.GetSsortingng() 

convertir en arrière.

  public Byte[] Encrypt(Byte[] data, Ssortingng password) { //Just random 8 bytes for salt var salt = new Byte[] {1, 2, 3, 4, 5, 6, 7, 8}; using (var cc = new CipherContext(Cipher.AES_256_CBC)) { //Constructing key and init vector from ssortingng password byte[] passwordBytes = Encoding.UTF8.GetBytes(password); byte[] iv; byte[] key = cc.BytesToKey(MessageDigest.MD5, salt, passwordBytes, 1, out iv); var memoryStream = new MemoryStream(); //Performing encryption thru unmanaged wrapper var aesData = cc.Crypt(data, key, iv, true); //Append salt so final data will look Salted___SALT|RESTOFTHEDATA memoryStream.Write(Encoding.UTF8.GetBytes("Salted__"), 0, 8); memoryStream.Write(salt, 0, 8); memoryStream.Write(aesData, 0, aesData.Length); return memoryStream.ToArray(); } } public Byte[] Decrypt(Ssortingng password, Byte[] encryptedData) { byte[] salt = null; //extracting salt if presented if (encryptedData.Length > 16) { if (Encoding.UTF8.GetSsortingng(encryptedData).StartsWith("Salted__")) { salt = new Byte[8]; Buffer.BlockCopy(encryptedData, 8, salt, 0, 8); } } //Removing salt from the original array int aesDataLength = encryptedData.Length - 16; byte[] aesData = new byte[aesDataLength]; Buffer.BlockCopy(encryptedData, 16, aesData, 0, aesDataLength); using (var cc = new CipherContext(Cipher.AES_256_CBC)) { //Constructing key and init vector from ssortingng password and salt byte[] passwordBytes = Encoding.UTF8.GetBytes(password); byte[] iv; byte[] key = cc.BytesToKey(MessageDigest.MD5, salt, passwordBytes, 1, out iv); //Decrypting return cc.Decrypt(aesData, key, iv, 0); } }