https://github.com/bytedev/bytedev.crypto
Provides simple cryptographic related classes for hashing/verifying data, encrypting/decrypting data and creating random data in .NET.
https://github.com/bytedev/bytedev.crypto
crypto cryptography csharp encrypting hashing random
Last synced: 7 months ago
JSON representation
Provides simple cryptographic related classes for hashing/verifying data, encrypting/decrypting data and creating random data in .NET.
- Host: GitHub
- URL: https://github.com/bytedev/bytedev.crypto
- Owner: ByteDev
- License: mit
- Created: 2018-08-10T16:20:04.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-01-12T07:41:15.000Z (about 4 years ago)
- Last Synced: 2025-06-22T23:04:06.294Z (7 months ago)
- Topics: crypto, cryptography, csharp, encrypting, hashing, random
- Language: C#
- Homepage:
- Size: 1.71 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://ci.appveyor.com/project/bytedev/ByteDev-Crypto/branch/master)
[](https://www.nuget.org/packages/ByteDev.Crypto)
# ByteDev.Crypto
Provides simple cryptographic related classes for hashing/verifying data, encrypting/decrypting data and creating crypto random data in .NET.
## Installation
ByteDev.Crypto has been written as a .NET Standard 2.0 library, so you can consume it from a .NET Core or .NET Framework 4.6.1 (or greater) application.
ByteDev.Crypto is hosted as a package on nuget.org. To install from the Package Manager Console in Visual Studio run:
`Install-Package ByteDev.Crypto`
Further details can be found on the [nuget page](https://www.nuget.org/packages/ByteDev.Crypto/).
## Release Notes
Releases follow semantic versioning.
Full details of the release notes can be viewed on [GitHub](https://github.com/ByteDev/ByteDev.Crypto/blob/master/docs/RELEASE-NOTES.md).
## Usage
The library is broken into three main namespaces:
- Hashing
- Encryption
- Random
---
### Hashing
Use namespace `ByteDev.Crypto.Hashing`.
This namespace contains two main classes: `HashService` and `FileChecksumService`.
#### `HashService`
`HashService` class methods:
- Hash
- Verify
```csharp
IHashService service = new HashService(new Md5Algorithm(), EncodingType.Base64);
// Hash a phrase
string base64Hash = service.Hash(new ClearPhrase("Password1"));
// Verify a phrase against a hash
bool isSuccessful = service.Verify(new ClearPhrase("Pasword123456"), base64Hash);
```
#### `FileChecksumService`
`FileChecksumService` class methods:
- Calculate
- Verify
- Matches
```csharp
IFileChecksumService service = new FileChecksumService(new Md5Algorithm(), EncodingType.Hex);
// Calculate file checksum (hash)
string hexChecksum = service.Calculate(@"C:\myFile.txt");
// Verify existing checksum matches file's
bool isSuccessful = service.Verify(@"C:\myFile.txt", hexChecksum);
// Search directory for files with a particular checksum
IList matches = service.Matches(@"C:\Temp", hexChecksum);
```
---
### Encryption
Use namespace `ByteDev.Crypto.Encryption`.
`EncryptionService` class methods:
- Encrypt
- Decrypt
- EncryptProperties
- DecryptProperties
Initializing `EncryptionService`:
```csharp
IEncryptionAlgorithm algo = new RijndaelAlgorithm();
IEncryptionKeyIvFactory keyFactory = new EncryptionKeyIvFactory(algo);
EncryptionKeyIv keyIv = keyFactory.Create("Password1", Encoding.UTF8.GetBytes("someSalt"));
IEncryptionService service = new EncryptionService(algo, keyIv);
```
#### `Encrypt` & `Decrypt`
Encrypt a secret with a key and then decrypt it:
```csharp
byte[] cipher = service.Encrypt("mySecret");
string clearText = service.Decrypt(cipher);
// clearText == "mySecret"
```
Once a byte array cipher has been created the `ByteDev.Encoding.Encoder` class can be used for any required encoding:
```csharp
byte[] cipher = service.Encrypt("mySecret", keyIv);
Encoder encoder = new Encoder(EncodingType.Hex);
string hex = encoder.Encode(cipher);
```
#### `EncryptProperties` & `DecryptProperties`
The `EncryptionService` class also supports encrypting/decrypting an object's public string properties that use `EncryptAttribute` through the `EncryptProperties` and `DecryptProperties` methods.
```csharp
public class MyInfo
{
[Encrypt]
public string Secrets { get; set; }
}
var info = new MyInfo { Secrets = "Some secrets" };
service.EncryptProperties(info, EncodingType.Hex);
// info.Secrets is now encrypted and encoded as hex
service.DecryptProperties(info, EncodingType.Hex);
// info.Secrets == "Some secrets"
```
---
### Random
Use namespace `ByteDev.Crypto.Random`.
`CryptoRandomString` class methods:
- GenerateString
- GenerateArray
#### `GenerateString`
Generate a random string of a specified length using only the character set specified (you can also call `GenerateString` with a min and max length):
```csharp
const int length = 5;
using (var r = new CryptoRandomString(CharacterSets.AlphaNumeric))
{
string randomString = r.GenerateString(length);
}
```
#### `GenerateArray`
Generate a char array of random characters of a specified length using only the character set specified (you can also call `GenerateArray` with a min and max length):
```csharp
const int length = 10;
using (var r = new CryptoRandomString(CharacterSets.Digits))
{
char[] randomChars = r.GenerateArray(length);
}
```
`CryptoRandomNumber` class methods:
- GenerateInt32
#### `GenerateInt32`
Generate a random number.
```csharp
using (var r = new CryptoRandomNumber())
{
int randomInt = r.GenerateInt32();
}
```