Class CryptoHelper
- Namespace
- SecureExchangesSDK.Helpers
- Assembly
- SecureExchangesSDK.NetCore.dll
This is the Helper to encrypt and decrypt the information with Secure Exchanges
public static class CryptoHelper
- Inheritance
-
CryptoHelper
- Inherited Members
Methods
AlterBinary(string, byte[], int, int)
This will derive a byteArray with a Password and a number of iteration
public static byte[] AlterBinary(string password, byte[] original, int iteration, int maskLength = 16)
Parameters
passwordstringPassword to use for derivation, longer, is better
originalbyte[]The original byte array to derive
iterationintthe number of iteration you want to derive. Higher is better, but will be more slow. 1000 should be use
maskLengthint
Returns
- byte[]
Examples
Random rnd = new Random();
var iteration = rnd.Next(1000, 1200);
byte[] alterByteArray = CryptoHelper.AlterBinary("ThatIsAVeryComplexPswMmmNotSure!!!?", binary, iteration);
AlterGuid(string, Guid)
That is use to Derive a Guid with a password
public static Guid AlterGuid(string password, Guid original)
Parameters
passwordstringPassword need to be use for derivation
originalGuidOriginal Guid need to be derived
Returns
Examples
Guid newGuid = CryptoHelper.AlterGuid(password, MyGuid);
BytesXor(byte[], byte[])
Performs XOR operation between two byte arrays of equal length.
public static byte[] BytesXor(byte[] mask, byte[] source)
Parameters
maskbyte[]The mask byte array to XOR with the source.
sourcebyte[]The source byte array to be XORed.
Returns
- byte[]
A new byte array containing the XOR result.
Examples
byte[] mask = new byte[] { 0x0F, 0xF0, 0xAA };
byte[] source = new byte[] { 0x55, 0x55, 0x55 };
byte[] result = CryptoHelper.BytesXor(mask, source);
// result = { 0x5A, 0xA5, 0xFF }
Exceptions
- Exception
Thrown when the arrays have different lengths.
ClearRSAKeyStore(string)
public static bool ClearRSAKeyStore(string keyStoreName)
Parameters
keyStoreNamestring
Returns
ConcatByteArray(params byte[][])
Use to merge multiple bytearray togheter
public static byte[] ConcatByteArray(params byte[][] arrays)
Parameters
arraysbyte[][]Return a single bytes arrays
Returns
- byte[]
Examples
byte[] singleByteArray = CryptoHelper.ConcatByteArray(byte[], byte[],byte[]);
CreateNewPrivateCertificate(int, bool)
Export a certificate with the private Key
public static string CreateNewPrivateCertificate(int keySize, bool exportPrivateKey = false)
Parameters
Returns
CreateNewPrivateKey(int)
Create a new private RSA key xml format
public static string CreateNewPrivateKey(int keySize)
Parameters
keySizeintKey size need to be use, 256, 512, 1024, 2048, 4096, 8192
Returns
- string
Return the xml private key
CreateRSAKeyStore(string, int)
Create an RSA key stored in the file system (cross-platform alternative to CspParameters MachineKeyStore). On Windows, falls back to CspParameters. On other platforms, uses file-based key storage.
public static string CreateRSAKeyStore(string keyStoreName, int keySize = 2048)
Parameters
Returns
- string
The key container name
DecryptBinaryFromBytes(byte[], byte[], byte[], PaddingMode)
This method is use to decrypt binary AES
public static byte[] DecryptBinaryFromBytes(byte[] cipher, byte[] Key, byte[] IV, PaddingMode paddingMode = PaddingMode.PKCS7)
Parameters
cipherbyte[]The binary to decrypt, canot be null
Keybyte[]The key use to decrypt the binary
IVbyte[]The iv use to decrypt the binary
paddingModePaddingModePadding mode use to decrypt. The default is PKCS7
Returns
- byte[]
The decrypted array
Examples
byte[] unEncryptedByteArray = CryptoHelper.DecryptBinaryFromBytes(Convert.FromBase64String(Base64BinaryArray), Key, IV);
DecryptFile(string, string, byte[], byte[])
Decrypt file, destination will be override.
public static void DecryptFile(string sourceFilename, string destinationFilename, byte[] Key, byte[] IV)
Parameters
DecryptRSAContent(string, byte[], bool)
Decrypt RSA crypted data with private key, and return a byte array
public static byte[] DecryptRSAContent(string privateKey, byte[] cryptedData, bool fOAEP)
Parameters
privateKeystringThe xml private key need to be use to uncrypt the crypteddata
cryptedDatabyte[]Byte array of encrypted data
fOAEPbooltrue to perform direct System.Security.Cryptography.RSA encryption using OAEP padding; otherwise, false to use PCKS#1.5 padding
Returns
- byte[]
The byte array uncrypted of the byte array
DecryptRSAContentToString(string, byte[], bool)
Decrypt RSA crypted data with private key, and return a string
public static string DecryptRSAContentToString(string privateKey, byte[] cryptedData, bool fOAEP)
Parameters
privateKeystringThe xml private key need to be use to uncrypt the crypteddata
cryptedDatabyte[]Byte array of encrypted data
fOAEPbooltrue to perform direct System.Security.Cryptography.RSA encryption using OAEP padding; otherwise, false to use PCKS#1.5 padding
Returns
- string
The string uncrypted of the byte array
Examples
string decryptedString = CryptoHelper.DecryptRSAContentToString(privateKey, stringByteArray, true);
DecryptSecfFile(string, byte[], byte[])
Decrypt file, destination will be override.
public static bool DecryptSecfFile(string sourceFilename, byte[] Key, byte[] IV)
Parameters
Returns
DecryptSecfFile(string, string, byte[], byte[])
Decrypt file, destination will be override.
public static bool DecryptSecfFile(string sourceFilename, string destinationDirectory, byte[] Key, byte[] IV)
Parameters
Returns
DecryptStream(Stream, Stream, byte[], byte[], PaddingMode)
Decrypt Binaray with stream
public static void DecryptStream(Stream inputStream, Stream outputStream, byte[] Key, byte[] IV, PaddingMode paddingMode = PaddingMode.PKCS7)
Parameters
inputStreamStreamThe caller must close the input stream after use
outputStreamStreamThe caller must close the output stream after use
Keybyte[]The key
IVbyte[]The IV
paddingModePaddingModeThe padding mode
Exceptions
DecryptStringFromBase64(string, byte[], byte[])
Decrypt base 64 string
public static string DecryptStringFromBase64(string b64, byte[] Key, byte[] IV)
Parameters
b64stringThe encrypted string base64
Keybyte[]The key need to be use for decryption
IVbyte[]The iv need to be use for decryption
Returns
Examples
string decryptedString = DecryptStringFromBytes("SSBuZWVkIHRvIGJlIGRlY3J5cHRlZD8gWW91IGFyZSByaWdodCwgdGhhdCB3YXMgbm90IHJlYWxseSBlbmNyeXB0ZWQhISA6LSk=", Key, IV);
DecryptStringFromBase64(string, string, string)
Decrypts a Base64 encoded encrypted string using Base64 encoded key and IV.
public static string DecryptStringFromBase64(string b64, string Base64Key, string Base64IV)
Parameters
b64stringThe Base64 encoded encrypted string.
Base64KeystringThe Base64 encoded AES key.
Base64IVstringThe Base64 encoded AES initialization vector.
Returns
- string
The decrypted plain text string.
Examples
string decrypted = CryptoHelper.DecryptStringFromBase64(encryptedB64, base64Key, base64IV);
DecryptStringFromBytes(byte[], byte[], byte[])
Decrypt binaryText
public static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
Parameters
cipherTextbyte[]The encrypted binary data
Keybyte[]The key need to be used for decryption
IVbyte[]The iv need to be used for decryption
Returns
- string
return a string unencrypted of a string encrypted
Examples
DecryptStringFromBytes(Convert.FromBase64String(b64), Key, IV);
EncryptBinary(byte[], byte[], byte[], PaddingMode)
Use to encrypt with AES a byte array
public static byte[] EncryptBinary(byte[] binary, byte[] Key, byte[] IV, PaddingMode paddingMode = PaddingMode.PKCS7)
Parameters
binarybyte[]Binary need to be encrypted
Keybyte[]The key of the encryption
IVbyte[]The iv of the encryption
paddingModePaddingMode
Returns
- byte[]
Return the crypted bytes array
Examples
byte[] cryptedBinary = CryptoHelper.EncryptBinary(Binary, Key, IV);
EncryptFile(string, string, byte[], byte[])
Use to encrypt file destination will be override
public static void EncryptFile(string sourceFilename, string destinationFilename, byte[] Key, byte[] IV)
Parameters
EncryptRSAContent(string, byte[], bool)
Encrypt a byte array with a public key
public static byte[] EncryptRSAContent(string publicKey, byte[] content, bool fOAEP)
Parameters
publicKeystringThe xml public key need to be use
contentbyte[]The string need to be encrypted
fOAEPbooltrue to perform direct System.Security.Cryptography.RSA encryption using OAEP padding; otherwise, false to use PCKS#1.5 padding
Returns
- byte[]
Byte array of the byte array, encrypted with the public key
Examples
byte[] cryptedString = EncryptRSAContent(publicKey, contentBinary, true);
EncryptRSAContent(string, string)
Encrypt RSA content with xml public key
public static byte[] EncryptRSAContent(string publicKey, string content)
Parameters
Returns
- byte[]
Encrypted string
Examples
byte[] encryptedData = EncryptRSAContent(publicKey, content);
EncryptRSAContent(string, string, bool)
Encrypt a string with a public key
public static byte[] EncryptRSAContent(string publicKey, string content, bool fOAEP)
Parameters
publicKeystringThe xml public key need to be use
contentstringThe string need to be encrypted System.Text.Encoding.Default
fOAEPbooltrue to perform direct System.Security.Cryptography.RSA encryption using OAEP padding; otherwise, false to use PCKS#1.5 padding
Returns
- byte[]
Byte array of the string, encrypted with the public key
Examples
byte[] cryptedString = EncryptRSAContent(publicKey, contentString, true);
EncryptSecfFile(string, byte[], byte[])
Use to encrypt file destination will be override
public static bool EncryptSecfFile(string sourceFilename, byte[] Key, byte[] IV)
Parameters
Returns
EncryptSecfFile(string, string, byte[], byte[])
Use to encrypt file destination will be override
public static bool EncryptSecfFile(string sourceFilename, string destinationDirectory, byte[] Key, byte[] IV)
Parameters
Returns
EncryptStream(Stream, Stream, byte[], byte[], PaddingMode)
Encrypt binary by using stream to encrypt large file
public static void EncryptStream(Stream inputStream, Stream outputStream, byte[] Key, byte[] IV, PaddingMode paddingMode = PaddingMode.PKCS7)
Parameters
inputStreamStreamThe input stream
outputStreamStreamThe outpout stream. ATTENTION THE CALLER MUST CLOSE THE STREAM
Keybyte[]The key
IVbyte[]The IV
paddingModePaddingModeThe padding mode
Exceptions
EncryptStringToB64(string, byte[], byte[])
Use to encrypt a string to UTF8 base 64
public static string EncryptStringToB64(string plainText, byte[] Key, byte[] IV)
Parameters
Returns
- string
The base64 string
Examples
string cryptedString = CryptoHelper.EncryptStringToB64("I need encryption for this string", KEY, IV);
EncryptStringToBytes(string, byte[], byte[])
Use to encrypt plainText UTF8 to byte array
public static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
Parameters
Returns
- byte[]
A byte array encrypted. The plainText must be in UTF-8
Examples
byte[] encrypted = CryptoHelper.EncryptStringToBytes(plainText, Key, IV);
EnncryptRSAContentToBase64String(string, string)
Encrypt with public key a string. Use RSA crypto provider
public static string EnncryptRSAContentToBase64String(string publicKey, string content)
Parameters
Returns
- string
Base64 encrypted string
Examples
string encryptedString = CryptoHelper.EnncryptRSAContentToBase64String(PublicKey, Content);
FillSecureRandomByteArray(byte[])
Fill a array with random strong value
public static void FillSecureRandomByteArray(byte[] data)
Parameters
databyte[]Array to fill
GenerateAESKeys()
Generate a new AES keys
public static Keys GenerateAESKeys()
Returns
GenerateBase64KeyAndIV(out string, out string)
Generate 256 bits base 64 key and base 64 iv key with Aes.
public static void GenerateBase64KeyAndIV(out string b64Key, out string b64iv)
Parameters
GenerateSecureRandomByteArray(int)
That method will return a array fill with SecureRandomValue
public static byte[] GenerateSecureRandomByteArray(int length)
Parameters
lengthint
Returns
- byte[]
GetKeyFromSHA512(byte[])
From a SHA512 return a 32 bit keys
public static byte[] GetKeyFromSHA512(byte[] hash)
Parameters
hashbyte[]
Returns
- byte[]
GetMD5Bytes(string)
Computes the MD5 hash of a UTF-8 encoded string and returns it as a byte array.
public static byte[] GetMD5Bytes(string plainText)
Parameters
plainTextstringThe UTF-8 string to hash.
Returns
- byte[]
The MD5 hash as a byte array, or null if the input is null or empty.
Examples
byte[] hashBytes = CryptoHelper.GetMD5Bytes("Hello World");
GetMD5HashOfBytes(byte[])
Return a MD5 Hexa string of the hash
public static string GetMD5HashOfBytes(byte[] b)
Parameters
bbyte[]Source binary that need to get the Hash
Returns
- string
MD5 128 bit hexa hash
Examples
string fileHash = CryptoHelper.GetMD5HashOfBytes(Binary);
GetMD5HashOfFile(string)
Return a MD5 hash of a file
public static string GetMD5HashOfFile(string filePath)
Parameters
filePathstringPath to the file
Returns
- string
HEXA MD5 string file
Examples
string hash = CryptoHelper.GetMD5HashOfFile(myfile.FileName);
GetMD5HashOfStream(Stream)
Get the Hexa MD5 string of a stream
public static string GetMD5HashOfStream(Stream stream)
Parameters
streamStream
Returns
Examples
using (var stream = new BufferedStream(File.OpenRead(filePath), 3145728))
{
return GetMD5HashOfStream(stream);
}
GetMD5HashOfString(string)
Return the MD5 hash of a string
public static string GetMD5HashOfString(string stringToHash)
Parameters
stringToHashstringUTF-8 string
Returns
- string
HEXA string of the Hash
Examples
string hash = CryptoHelper.GetMD5HashOfString(content);
GetPublicKeyFromPrivateKey(string)
Return the public RSA key of a private key. the public key will be in xml format
public static string GetPublicKeyFromPrivateKey(string privateKey)
Parameters
privateKeystringXML private key to extract the public key
Returns
- string
The xml public key of the private key
GetPublicKeyFromPrivateXmlOrPEM(string)
public static RSAKeys GetPublicKeyFromPrivateXmlOrPEM(string privateKey)
Parameters
privateKeystring
Returns
GetPublicKeySize(string)
Get the key size of a public key
public static int GetPublicKeySize(string publicKey)
Parameters
publicKeystring
Returns
GetSHA256Bytes(byte[])
REturn the hash of a SHA256 of bytes
public static byte[] GetSHA256Bytes(byte[] bytes)
Parameters
bytesbyte[]
Returns
- byte[]
GetSHA256Bytes(string)
Get the SHA 256 of UTF-8 string
public static byte[] GetSHA256Bytes(string plainText)
Parameters
plainTextstring
Returns
- byte[]
GetSHA256HashOfBytes(byte[])
Get the HEX hash of bytes
public static string GetSHA256HashOfBytes(byte[] b)
Parameters
bbyte[]
Returns
GetSHA256HashOfString(string)
Get the HEX hash of a string utf8
public static string GetSHA256HashOfString(string b)
Parameters
bstring
Returns
GetSHA256OfFile(string)
Get the HEX hash of file
public static string GetSHA256OfFile(string filePath)
Parameters
filePathstring
Returns
GetSHA256OfStream(Stream)
Get the HEX hash of stream
public static string GetSHA256OfStream(Stream stream)
Parameters
streamStream
Returns
GetSHA512Bytes(byte[])
Return the hash of a SHA 512 of bytes
public static byte[] GetSHA512Bytes(byte[] bytes)
Parameters
bytesbyte[]
Returns
- byte[]
GetSHA512Bytes(string)
Get SHA 512 of UTF-8 string
public static byte[] GetSHA512Bytes(string plainText)
Parameters
plainTextstring
Returns
- byte[]
GetSHA512HashOfBytes(byte[])
Get the HEX hash of bytes
public static string GetSHA512HashOfBytes(byte[] b)
Parameters
bbyte[]
Returns
GetSHA512HashOfString(string)
Get the HEX hash of a string utf8
public static string GetSHA512HashOfString(string b)
Parameters
bstring
Returns
GetSHA512OfFile(string, bool)
Get the HEX hash of file
public static string GetSHA512OfFile(string filePath, bool fileOverOneGigabitHashIsSplit = true)
Parameters
filePathstringThe file path of a file
fileOverOneGigabitHashIsSplitboolIf the file is over that 1G, then the hash calculation is optimised with combinaison of 100Mb hash
Returns
GetSHA512OfStream(Stream)
Get the HEX hash of stream
public static string GetSHA512OfStream(Stream stream)
Parameters
streamStream
Returns
GetStrongKeyStoreNameFromAssemblyGuid()
public static string GetStrongKeyStoreNameFromAssemblyGuid()
Returns
HexToByteArray(string)
public static byte[] HexToByteArray(string hex)
Parameters
hexstring
Returns
- byte[]
KeyAlreadyExistInMachineKeys(string)
public static bool KeyAlreadyExistInMachineKeys(string strongName)
Parameters
strongNamestring
Returns
RSADencryptWhitKeyContainerFromMachineKeys(byte[], string)
public static byte[] RSADencryptWhitKeyContainerFromMachineKeys(byte[] encrBytes, string containerName)
Parameters
Returns
- byte[]
RSADencryptWhitKeyContainerFromMachineKeysToString(byte[], string)
public static string RSADencryptWhitKeyContainerFromMachineKeysToString(byte[] encrBytes, string containerName)
Parameters
Returns
RSAEncryptWhitKeyContainerMachineKeyStore(string, string)
public static byte[] RSAEncryptWhitKeyContainerMachineKeyStore(string message, string keyContainerName)
Parameters
Returns
- byte[]
RSAEncryptWhitKeyContainerMachineKeyStoreToBase64(string, string)
public static string RSAEncryptWhitKeyContainerMachineKeyStoreToBase64(string message, string keyContainerName)
Parameters
Returns
SignDataWithPrivateKey(string, byte[])
Get the signature of a message signed with a private key. Always uses SHA512.
public static byte[] SignDataWithPrivateKey(string privateKey, byte[] cryptedData)
Parameters
Returns
- byte[]
SignDataWithPrivateKey(string, string)
return a base64 signature of the hash
public static string SignDataWithPrivateKey(string privateKey, string clearText)
Parameters
Returns
TransformXmlKeyToPEM(string)
That will transform a xml key to certificate
public static string TransformXmlKeyToPEM(string xmlKey)
Parameters
xmlKeystringIf we get the private key, the PEM will contain the private key if not only the public key
Returns
VerifySignature(string, byte[], byte[], string)
Vérifie la signature d'un échange clé publique privé
public static bool VerifySignature(string xmlPublicKey, byte[] signature, byte[] clearHashData, string hashAlgo = "SHA512")
Parameters
xmlPublicKeystringLa clé publique associer à la clé privé
signaturebyte[]La signature en bytes
clearHashDatabyte[]Le hash des données signers en bytes
hashAlgostringl'alrorithme utiliser
Returns
VerifySignature(string, string, string, string)
Vérifie la signature d'un échange clé publique privé
public static bool VerifySignature(string xmlPublicKey, string base64Signature, string clearBase64HashData, string hashAlgo = "SHA512")
Parameters
xmlPublicKeystringLa clé publique associer à la clé privé
base64SignaturestringLa signature fait à partir de la clé privé en base 64
clearBase64HashDatastringLe hash du message qui à été signer en base 64
hashAlgostringl'algoritme utiliser