# Class SecurityHelper Namespace: [CapyKit.Helpers](CapyKit.Helpers.md) Assembly: CapyKit.dll A class that contains methods for managing secure data processing and cryptography. ```csharp public class SecurityHelper ``` #### Inheritance [object](https://learn.microsoft.com/dotnet/api/system.object) ← [SecurityHelper](CapyKit.Helpers.SecurityHelper.md) #### Inherited Members [object.Equals\(object?\)](https://learn.microsoft.com/dotnet/api/system.object.equals\#system\-object\-equals\(system\-object\)), [object.Equals\(object?, object?\)](https://learn.microsoft.com/dotnet/api/system.object.equals\#system\-object\-equals\(system\-object\-system\-object\)), [object.GetHashCode\(\)](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType\(\)](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone\(\)](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone), [object.ReferenceEquals\(object?, object?\)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.ToString\(\)](https://learn.microsoft.com/dotnet/api/system.object.tostring) #### Extension Methods [ObjectExtensions.UpdateProperties\(SecurityHelper, SecurityHelper\)](CapyKit.Extensions.ObjectExtensions.md\#CapyKit\_Extensions\_ObjectExtensions\_UpdateProperties\_\_1\_\_\_0\_\_\_0\_), [ObjectExtensions.UpdateProperties\(object, object\)](CapyKit.Extensions.ObjectExtensions.md\#CapyKit\_Extensions\_ObjectExtensions\_UpdateProperties\_System\_Object\_System\_Object\_) ## Methods ### CompareHashedPassword\(Password, string, byte\[\], params object\[\]\) Compares an unencrypted password with a stored, encrypted existingPassword. This method uses the specified password algorithm type T to retrieve the hashed version of the password and then compares it with the existingPassword. ```csharp public static bool CompareHashedPassword(Password existingPassword, string password, byte[] salt, params object[] args) ``` #### Parameters `existingPassword` [Password](CapyKit.Password.md) The existing, encrypted password. `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The unencrypted password to be compared. `salt` [byte](https://learn.microsoft.com/dotnet/api/system.byte)\[\] The salt value used in password hashing. `args` [object](https://learn.microsoft.com/dotnet/api/system.object)\[\] Additional arguments required for constructing the password algorithm instance. #### Returns [bool](https://learn.microsoft.com/dotnet/api/system.boolean) true if hash comparison succeeds, false if it fails. #### Type Parameters `T` The type of the password hashing algorithm. ### CompareHashedPassword\(Password, string, byte\[\], IPasswordAlgorithm, params object\[\]\) Compares an unencrypted password with a stored, encrypted existingPassword. This method uses the specified algorithm to retrieve the hashed version of the password and then compares it with the existingPassword. ```csharp public static bool CompareHashedPassword(Password existingPassword, string password, byte[] salt, IPasswordAlgorithm algorithm, params object[] args) ``` #### Parameters `existingPassword` [Password](CapyKit.Password.md) The existing, encrypted password. `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The unencrypted password to be compared. `salt` [byte](https://learn.microsoft.com/dotnet/api/system.byte)\[\] The salt value used in password hashing. `algorithm` [IPasswordAlgorithm](CapyKit.IPasswordAlgorithm.md) The password hashing algorithm. `args` [object](https://learn.microsoft.com/dotnet/api/system.object)\[\] Additional arguments required for constructing the password algorithm instance. #### Returns [bool](https://learn.microsoft.com/dotnet/api/system.boolean) true if hash comparison succeeds, false if it fails. ### CompareSessionID\(string, string\) Compares two session identifiers. ```csharp public static bool CompareSessionID(string first, string second) ``` #### Parameters `first` [string](https://learn.microsoft.com/dotnet/api/system.string) The first session identifier. `second` [string](https://learn.microsoft.com/dotnet/api/system.string) The second session identifier. #### Returns [bool](https://learn.microsoft.com/dotnet/api/system.boolean) true if comparison succeeds, false if not. ### GetPassword\(string, params object\[\]\) Retrieves a object using the specified password and generates a random salt value. Then it uses that salt to call the overloaded method with the given password and the generated salt as arguments. ```csharp public static Password GetPassword(string password, params object[] args) ``` #### Parameters `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The plaintext password to be hashed. `args` [object](https://learn.microsoft.com/dotnet/api/system.object)\[\] Optional constructor arguments for the implementation instance. #### Returns [Password](CapyKit.Password.md) A new object with the given password and a randomly generated salt, as well as an instance of T created using any optional constructor arguments provided. #### Type Parameters `T` The type of implementation to use. #### See Also [SecurityHelper](CapyKit.Helpers.SecurityHelper.md).SALT\_SIZE ### GetPassword\(string, byte\[\], params object\[\]\) Retrieves a object using the specified password, salt, and optional constructor arguments. ```csharp public static Password GetPassword(string password, byte[] salt, params object[] args) where T : IPasswordAlgorithm ``` #### Parameters `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The plaintext password to be hashed. `salt` [byte](https://learn.microsoft.com/dotnet/api/system.byte)\[\] A random value used as an additional input to the one-way function that hashes data, a password or passphrase. This is used to make each output different for the same input thus adding security. `args` [object](https://learn.microsoft.com/dotnet/api/system.object)\[\] Optional constructor arguments for the implementation instance. #### Returns [Password](CapyKit.Password.md) A new object with the given password and salt, as well as an instance of T created using the provided constructor arguments. #### Type Parameters `T` The type of implementation to use. #### Remarks This method uses reflection to find a constructor for the specified password algorithm type (T). It emits an error event if a suitable constructor is not found or if there is an error invoking the constructor. ### GetRandomPassword\(int, params ValidCharacterCollection\[\]\) Gets a cryptographically strong random password. ```csharp public static string GetRandomPassword(int length, params ValidCharacterCollection[] validCharacters) ``` #### Parameters `length` [int](https://learn.microsoft.com/dotnet/api/system.int32) The length of the password to generate. `validCharacters` [ValidCharacterCollection](CapyKit.Helpers.ValidCharacterCollection.md)\[\] An array of enumeration values representing the desired character sets. #### Returns [string](https://learn.microsoft.com/dotnet/api/system.string) The password. ### GetRandomString\(int\) A convenience method to generate a random string of the specified length using all character sets. ```csharp public static string GetRandomString(int length) ``` #### Parameters `length` [int](https://learn.microsoft.com/dotnet/api/system.int32) The desired length of the generated random string. #### Returns [string](https://learn.microsoft.com/dotnet/api/system.string) #### See Also [ValidCharacterCollection](CapyKit.Helpers.ValidCharacterCollection.md), [SecurityHelper](CapyKit.Helpers.SecurityHelper.md).[GetRandomString](CapyKit.Helpers.SecurityHelper.md\#CapyKit\_Helpers\_SecurityHelper\_GetRandomString\_System\_Int32\_CapyKit\_Helpers\_ValidCharacterCollection\_\_\_)\([int](https://learn.microsoft.com/dotnet/api/system.int32), params [ValidCharacterCollection](CapyKit.Helpers.ValidCharacterCollection.md)\[\]\) ### GetRandomString\(int, params ValidCharacterCollection\[\]\) Gets a cryptographically strong random string using the character values found in VALID_CHARACTERS. ```csharp public static string GetRandomString(int length, params ValidCharacterCollection[] validChars) ``` #### Parameters `length` [int](https://learn.microsoft.com/dotnet/api/system.int32) The length of the string to create. `validChars` [ValidCharacterCollection](CapyKit.Helpers.ValidCharacterCollection.md)\[\] #### Returns [string](https://learn.microsoft.com/dotnet/api/system.string) The random string. ### GetSalt\(int\) Generates a random byte array that can act as a salt. ```csharp public static byte[] GetSalt(int length = 32) ``` #### Parameters `length` [int](https://learn.microsoft.com/dotnet/api/system.int32) (Optional) The desired length of the generated byte array. #### Returns [byte](https://learn.microsoft.com/dotnet/api/system.byte)\[\] An array of byte. #### Remarks A default length of is provided as a sane default. Larger values can be used for increased entropy. ### Pbkdf2\(string, byte\[\]\) Generates a new object using the PBKDF2 algorithm with the provided password and salt. ```csharp public static Password Pbkdf2(string password, byte[] salt) ``` #### Parameters `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The clear text password to be hashed. `salt` [byte](https://learn.microsoft.com/dotnet/api/system.byte)\[\] A random value used to add an additional layer of security to the generated hash. #### Returns [Password](CapyKit.Password.md) A new object containing the hashed password and salt. #### Remarks This method uses the PBKDF2 (Password-Based Key Derivation Function 2) algorithm to generate a new password hash. The algorithm iteratively applies a pseudorandom function to the password and salt, which increases the security of the resulting hash. ### Pbkdf2\(string\) Generates a new object using the PBKDF2 algorithm with the provided password. This overload of the method generates a random salt value for added security. ```csharp public static Password Pbkdf2(string password) ``` #### Parameters `password` [string](https://learn.microsoft.com/dotnet/api/system.string) The clear text password to be hashed. #### Returns [Password](CapyKit.Password.md) A new object containing the hashed password and a randomly generated salt. #### Remarks This method uses the PBKDF2 (Password-Based Key Derivation Function 2) algorithm to generate a new password hash. The algorithm iteratively applies a pseudorandom function to the password and salt, which increases the security of the resulting hash. In this overload, a random salt value is generated using method.