Created
March 24, 2018 04:19
-
-
Save Oranzh/2520823f9d1cea603e60b8e8f3fe1d36 to your computer and use it in GitHub Desktop.
Revisions
-
odan revised this gist
Feb 22, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,7 +7,7 @@ A more secure password should contain a cost factor. Here is the complete exampl ```php <?php $plaintext = 'My secret message 1234'; $password = '3sc3RLrpd17'; $method = 'aes-256-cbc'; -
odan revised this gist
Feb 22, 2018 . 1 changed file with 6 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -36,6 +36,12 @@ In C# you have to install the [BCrypt-Official package](https://www.nuget.org/pa generate a hash password like this: ```csharp using System.Security.Cryptography; using System.IO; using System.Text; using System; public string EncryptString(string plainText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption -
odan revised this gist
Feb 22, 2018 . 1 changed file with 8 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,6 +1,10 @@ ## Version 2 A more secure password should contain a cost factor. Here is the complete example code: ### PHP ```php <?php $plaintext = 'My secret message 1234 Сейчас в СМИ'; @@ -26,6 +30,8 @@ echo 'decrypted to: ' . $decrypted . "\n\n"; ``` ### C# In C# you have to install the [BCrypt-Official package](https://www.nuget.org/packages/BCrypt-Official/) and generate a hash password like this: -
odan revised this gist
Feb 22, 2018 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,7 @@ # AES-256 encryption and decryption in PHP and C# **Update**: There is a more secure version available. [Details](#file-with_bcrypt_password_hash-md) ## PHP ```php -
odan revised this gist
Feb 22, 2018 . 1 changed file with 156 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,156 @@ A more secure password should contain a cost factor. ``` <?php $plaintext = 'My secret message 1234 Сейчас в СМИ'; $password = '3sc3RLrpd17'; $method = 'aes-256-cbc'; $key = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]); echo "Key:" . $key . "\n"; // IV must be exact 16 chars (128 bit) $iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0); // av3DYGLkwBsErphcyYp+imUW4QKs19hUnFyyYcXwURU= $encrypted = base64_encode(openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv)); // My secret message 1234 $decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv); echo 'plaintext=' . $plaintext . "\n"; echo 'cipher=' . $method . "\n"; echo 'encrypted to: ' . $encrypted . "\n"; echo 'decrypted to: ' . $decrypted . "\n\n"; ``` In C# you have to install the [BCrypt-Official package](https://www.nuget.org/packages/BCrypt-Official/) and generate a hash password like this: ```csharp public string EncryptString(string plainText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes.Create(); encryptor.Mode = CipherMode.CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor.Key = key.Take(32).ToArray(); encryptor.IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesEncryptor = encryptor.CreateEncryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode.Write); // Convert the plainText string into a byte array byte[] plainBytes = Encoding.ASCII.GetBytes(plainText); // Encrypt the input plaintext string cryptoStream.Write(plainBytes, 0, plainBytes.Length); // Complete the encryption process cryptoStream.FlushFinalBlock(); // Convert the encrypted data from a MemoryStream to a byte array byte[] cipherBytes = memoryStream.ToArray(); // Close both the MemoryStream and the CryptoStream memoryStream.Close(); cryptoStream.Close(); // Convert the encrypted byte array to a base64 encoded string string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length); // Return the encrypted data as a string return cipherText; } public string DecryptString(string cipherText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes.Create(); encryptor.Mode = CipherMode.CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor.Key = key.Take(32).ToArray(); encryptor.IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesDecryptor = encryptor.CreateDecryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode.Write); // Will contain decrypted plaintext string plainText = String.Empty; try { // Convert the ciphertext string into a byte array byte[] cipherBytes = Convert.FromBase64String(cipherText); // Decrypt the input ciphertext string cryptoStream.Write(cipherBytes, 0, cipherBytes.Length); // Complete the decryption process cryptoStream.FlushFinalBlock(); // Convert the decrypted data from a MemoryStream to a byte array byte[] plainBytes = memoryStream.ToArray(); // Convert the decrypted byte array to string plainText = Encoding.ASCII.GetString(plainBytes, 0, plainBytes.Length); } finally { // Close both the MemoryStream and the CryptoStream memoryStream.Close(); cryptoStream.Close(); } // Return the decrypted data as a string return plainText; } ``` ### Usage ```csharp string message = "My secret message 1234"; string password = "3sc3RLrpd17"; // hash the password with BCrypt string hashedPassword = BCrypt.Net.BCrypt.HashPassword(password, 12); // Convert hashed password to array byte[] key = Encoding.ASCII.GetBytes(hashedPassword); // Create secret IV byte[] iv = new byte[16] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; string encrypted = this.EncryptString(message, key, iv); string decrypted = this.DecryptString(encrypted, key, iv); Console.WriteLine(encrypted); Console.WriteLine(decrypted); ``` -
odan revised this gist
Feb 22, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ # AES-256 encryption and decryption in PHP and C# ## PHP -
odan revised this gist
Feb 22, 2018 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -123,15 +123,15 @@ public string DecryptString(string cipherText, byte[] key, byte[] iv) // Convert the decrypted data from a MemoryStream to a byte array byte[] plainBytes = memoryStream.ToArray(); // Convert the decrypted byte array to string plainText = Encoding.ASCII.GetString(plainBytes, 0, plainBytes.Length); } finally { // Close both the MemoryStream and the CryptoStream memoryStream.Close(); cryptoStream.Close(); } // Return the decrypted data as a string return plainText; } ``` -
odan revised this gist
Feb 22, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -123,7 +123,7 @@ public string DecryptString(string cipherText, byte[] key, byte[] iv) // Convert the decrypted data from a MemoryStream to a byte array byte[] plainBytes = memoryStream.ToArray(); // Convert the encrypted byte array to string plainText = Encoding.ASCII.GetString(plainBytes, 0, plainBytes.Length); } finally { // Close both the MemoryStream and the CryptoStream -
odan revised this gist
Feb 22, 2018 . 1 changed file with 6 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -31,6 +31,11 @@ echo 'decrypted to: ' . $decrypted . "\n\n"; ## C# ```csharp using System.Security.Cryptography; using System.IO; using System.Text; using System; public string EncryptString(string plainText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption @@ -62,7 +67,7 @@ public string EncryptString(string plainText, byte[] key, byte[] iv) cryptoStream.Write(plainBytes, 0, plainBytes . Length); // Complete the encryption process cryptoStream.FlushFinalBlock(); // Convert the encrypted data from a MemoryStream to a byte array byte[] cipherBytes = memoryStream.ToArray(); -
odan renamed this gist
Aug 10, 2017 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
odan revised this gist
Aug 10, 2017 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ # AES-256 encryption and decryption in PHP and C# ## PHP @@ -138,7 +138,7 @@ string message = "My secret message 1234"; string password = "3sc3RLrpd17"; // Create sha256 hash SHA256 mySHA256 = SHA256Managed.Create(); byte[] key = mySHA256.ComputeHash(Encoding.ASCII.GetBytes(password)); // Create secret IV -
odan revised this gist
Aug 10, 2017 . 1 changed file with 30 additions and 31 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -34,45 +34,45 @@ echo 'decrypted to: ' . $decrypted . "\n\n"; public string EncryptString(string plainText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes.Create(); encryptor.Mode = CipherMode.CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor.Key = key; encryptor.IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesEncryptor = encryptor.CreateEncryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode . Write); // Convert the plainText string into a byte array byte[] plainBytes = Encoding.ASCII.GetBytes(plainText); // Encrypt the input plaintext string cryptoStream.Write(plainBytes, 0, plainBytes . Length); // Complete the encryption process cryptoStream . FlushFinalBlock(); // Convert the encrypted data from a MemoryStream to a byte array byte[] cipherBytes = memoryStream.ToArray(); // Close both the MemoryStream and the CryptoStream memoryStream.Close(); cryptoStream.Close(); // Convert the encrypted byte array to a base64 encoded string string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length); // Return the encrypted data as a string return cipherText; @@ -81,49 +81,49 @@ public string EncryptString(string plainText, byte[] key, byte[] iv) public string DecryptString(string cipherText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes.Create(); encryptor.Mode = CipherMode.CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor.Key = key; encryptor.IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesDecryptor = encryptor.CreateDecryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode . Write); // Will contain decrypted plaintext string plainText = String.Empty; try { // Convert the ciphertext string into a byte array byte[] cipherBytes = Convert.FromBase64String(cipherText); // Decrypt the input ciphertext string cryptoStream.Write(cipherBytes, 0, cipherBytes . Length); // Complete the decryption process cryptoStream.FlushFinalBlock(); // Convert the decrypted data from a MemoryStream to a byte array byte[] plainBytes = memoryStream.ToArray(); // Convert the encrypted byte array to a base64 encoded string plainText = Encoding.ASCII.GetString(plainBytes, 0, plainBytes.Length); } finally { // Close both the MemoryStream and the CryptoStream memoryStream.Close(); cryptoStream.Close(); } // Return the encrypted data as a string @@ -139,17 +139,16 @@ string password = "3sc3RLrpd17"; // Create sha256 hash SHA256 mySHA256 = SHA256Managed . Create(); byte[] key = mySHA256.ComputeHash(Encoding.ASCII.GetBytes(password)); // Create secret IV byte[] iv = new byte[16] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; string encrypted = this.EncryptString(message, key, iv); string decrypted = this.DecryptString(encrypted, key, iv); Console.WriteLine(encrypted); Console.WriteLine(decrypted); ``` -
odan created this gist
Aug 10, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,156 @@ # Encrypt & Decrypt C# function to PHP function ## PHP ```php <?php $plaintext = 'My secret message 1234'; $password = '3sc3RLrpd17'; $method = 'aes-256-cbc'; // Must be exact 32 chars (256 bit) $password = substr(hash('sha256', $password, true), 0, 32); echo "Password:" . $password . "\n"; // IV must be exact 16 chars (128 bit) $iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0); // av3DYGLkwBsErphcyYp+imUW4QKs19hUnFyyYcXwURU= $encrypted = base64_encode(openssl_encrypt($plaintext, $method, $password, OPENSSL_RAW_DATA, $iv)); // My secret message 1234 $decrypted = openssl_decrypt(base64_decode($encrypted), $method, $password, OPENSSL_RAW_DATA, $iv); echo 'plaintext=' . $plaintext . "\n"; echo 'cipher=' . $method . "\n"; echo 'encrypted to: ' . $encrypted . "\n"; echo 'decrypted to: ' . $decrypted . "\n\n"; ``` ## C# ```csharp public string EncryptString(string plainText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes . Create(); encryptor . Mode = CipherMode . CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor . Key = key; encryptor . IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesEncryptor = encryptor . CreateEncryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode . Write); // Convert the plainText string into a byte array byte[] plainBytes = Encoding . ASCII . GetBytes(plainText); // Encrypt the input plaintext string cryptoStream . Write(plainBytes, 0, plainBytes . Length); // Complete the encryption process cryptoStream . FlushFinalBlock(); // Convert the encrypted data from a MemoryStream to a byte array byte[] cipherBytes = memoryStream . ToArray(); // Close both the MemoryStream and the CryptoStream memoryStream . Close(); cryptoStream . Close(); // Convert the encrypted byte array to a base64 encoded string string cipherText = Convert . ToBase64String(cipherBytes, 0, cipherBytes . Length); // Return the encrypted data as a string return cipherText; } public string DecryptString(string cipherText, byte[] key, byte[] iv) { // Instantiate a new Aes object to perform string symmetric encryption Aes encryptor = Aes . Create(); encryptor . Mode = CipherMode . CBC; //encryptor.KeySize = 256; //encryptor.BlockSize = 128; //encryptor.Padding = PaddingMode.Zeros; // Set key and IV encryptor . Key = key; encryptor . IV = iv; // Instantiate a new MemoryStream object to contain the encrypted bytes MemoryStream memoryStream = new MemoryStream(); // Instantiate a new encryptor from our Aes object ICryptoTransform aesDecryptor = encryptor . CreateDecryptor(); // Instantiate a new CryptoStream object to process the data and write it to the // memory stream CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode . Write); // Will contain decrypted plaintext string plainText = String . Empty; try { // Convert the ciphertext string into a byte array byte[] cipherBytes = Convert . FromBase64String(cipherText); // Decrypt the input ciphertext string cryptoStream . Write(cipherBytes, 0, cipherBytes . Length); // Complete the decryption process cryptoStream . FlushFinalBlock(); // Convert the decrypted data from a MemoryStream to a byte array byte[] plainBytes = memoryStream . ToArray(); // Convert the encrypted byte array to a base64 encoded string plainText = Encoding . ASCII . GetString(plainBytes, 0, plainBytes . Length); } finally { // Close both the MemoryStream and the CryptoStream memoryStream . Close(); cryptoStream . Close(); } // Return the encrypted data as a string return plainText; } ``` Usage ```csharp string message = "My secret message 1234"; string password = "3sc3RLrpd17"; // Create sha256 hash SHA256 mySHA256 = SHA256Managed . Create(); byte[] key = mySHA256 . ComputeHash(Encoding . ASCII . GetBytes(password)); // Create secret IV byte[] iv = new byte[16] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; string encrypted = this . EncryptString(message, key, iv); string decrypted = this . DecryptString(encrypted, key, iv); Console . WriteLine(encrypted); Console . WriteLine(decrypted); ``` Source: https://stackoverflow.com/a/45574121/1461181