public static byte[] Decrypt(byte[] encryptionPayload, SecureString passPhrase) { var passwordBytes = passPhrase.ToByteArray(); var output = Decrypt(encryptionPayload, passwordBytes); passwordBytes.ClearByteArray(); return output; }
public void SecureStringExtensions_ToByteArray_EmptyInput() { SecureString input = new SecureString(); byte[] output = input.ToByteArray(); byte[] expected = new byte[0]; CollectionAssert.AreEqual(expected, output); }
public static string Decrypt(string encryptedString, SecureString passPhrase, bool useBase36) { var passwordBytes = passPhrase.ToByteArray(); var output = Decrypt(encryptedString, passwordBytes, useBase36); passwordBytes.ClearByteArray(); return output; }
public static string Encrypt(SecureString input) { Validator.AssertNotNull(input, "input"); if(input.Length == 0) { return String.Empty; } byte[] bytes = input.ToByteArray(); try { // Encrypt var aes = new AesCryptoServiceProvider(); // Set nulled IV aes.IV = new byte[aes.IV.Length]; aes.Key = AesKey; ICryptoTransform aesEncryptor = aes.CreateEncryptor(); // Decrypt byte[] encryptedBytes = aesEncryptor.TransformFinalBlock(bytes, 0, bytes.Length); // Convert to Base64 string base64 = Convert.ToBase64String(encryptedBytes); // Remove Base64 padding string result = RemoveBase64Padding(base64); return result; } finally { bytes.ZeroFill(); } }
private static byte[] Encrypt_Private_v1(byte[] unencryptedBytes, SecureString passPhrase, int iterations) { var passPhraseAsBytes = passPhrase.ToByteArray(); var payload = Encrypt_Private_v1(unencryptedBytes, passPhraseAsBytes, iterations); passPhraseAsBytes.ClearByteArray(); // modify the byte array return payload; }
private static string Encrypt_Private_v1(string plainText, SecureString passPhrase, int iterations, bool useBase36) { // in version 1, we use UTF8 for our plain text value to bytes byte[] unencryptedBytes = Encoding.UTF8.GetBytes(plainText); var passPhraseAsBytes = passPhrase.ToByteArray(); var payload = Encrypt_Private_v1(unencryptedBytes, passPhraseAsBytes, iterations); passPhraseAsBytes.ClearByteArray(); // modify the byte array string cipherText; if (useBase36) { cipherText = Base36.ByteArrayToBase36String(payload); cipherText = cipherText.ToLower(); } else { cipherText = Convert.ToBase64String(payload); } // Return encrypted string witht the leading 8 characters as the salt return cipherText; }
//[Obsolete] //public static string EncryptToBase64String(SecureString passwordToProtect, string keyId, RSACryptoServiceProvider publicKey) //{ // return EncryptToBase64String(passwordToProtect, keyId, publicKey, null, null); //} ///// <summary> ///// This may be used to secure a password for symmetric encryption. ///// </summary> ///// <param name="passwordToProtect"></param> ///// <param name="publicKey"></param> ///// <returns></returns> //[Obsolete("Use the IPublicKey infrastructure")] //public static string EncryptToBase64String(SecureString passwordToProtect, string key1Id, RSACryptoServiceProvider publicKey1, string key2Id, RSACryptoServiceProvider publicKey2) //{ // // Use a 4-byte array to fill it with random bytes and convert it then // // to an integer value. // byte[] plainBytes; // //byte[] encryptedBytes = null; // plainBytes = passwordToProtect.ToByteArray(); // var asymEnc = new AsymmetricEncryptor(AsymmetricStrategyOption.Aes256_1000); // var asymObj = asymEnc.EncryptObject(plainBytes, key1Id, publicKey1, key2Id, publicKey2); // var json = Serializer.SerializeToJson(asymObj); // var bytes = Encoding.UTF8.GetBytes(json); // return Convert.ToBase64String(bytes); //} /// <summary> /// This may be used to secure a password for symmetric encryption. /// </summary> /// <param name="passwordToProtect"></param> /// <param name="publicKey"></param> /// <returns></returns> public static async Task<string> EncryptToBase64StringAsync(SecureString passwordToProtect, IPublicKey publicKey1, IPublicKey publicKey2) { // Use a 4-byte array to fill it with random bytes and convert it then // to an integer value. byte[] plainBytes; //byte[] encryptedBytes = null; plainBytes = passwordToProtect.ToByteArray(); var asymEnc = new AsymmetricEncryptor(AsymmetricStrategyOption.Aes256_1000); var asymObj = await asymEnc.EncryptObject_PrivateAsync(plainBytes, publicKey1, publicKey2); var json = Serializer.SerializeToJson(asymObj); var bytes = Encoding.UTF8.GetBytes(json); return Convert.ToBase64String(bytes); }