mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2025-06-22 22:07:28 +02:00
Initial version.
This commit is contained in:
commit
6bab491a21
40 changed files with 1812 additions and 0 deletions
88
LockItShared/Services/BluetoothLock/Crypto/Cipher.cs
Normal file
88
LockItShared/Services/BluetoothLock/Crypto/Cipher.cs
Normal file
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using TINK.Model.Device;
|
||||
|
||||
namespace TINK.Services.BluetoothLock.Crypto
|
||||
{
|
||||
public class Cipher : ICipher
|
||||
{
|
||||
/// <summary> Decrypt data. </summary>
|
||||
/// <remarks>
|
||||
/// Further info see:
|
||||
/// https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netcore-3.1 for further info
|
||||
// https://docs.microsoft.com/en-us/dotnet/standard/security/cryptographic-services
|
||||
// https://stackoverflow.com/questions/24903575/how-to-return-byte-when-decrypt-using-cryptostream-descryptoserviceprovider/24903689
|
||||
|
||||
/// </remarks>
|
||||
/// <param name="key">Key to decrypt data with.</param>
|
||||
/// <param name="encrypted">Encrpyted data to decrypt.</param>
|
||||
/// <returns>Decrypted data.</returns>
|
||||
public byte[] Decrypt(byte[] key, byte[] encrypted)
|
||||
{
|
||||
// Check arguments.
|
||||
if (encrypted == null || encrypted.Length <= 0)
|
||||
throw new ArgumentNullException(nameof(encrypted));
|
||||
|
||||
if (key == null || key.Length <= 0)
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
|
||||
using (Aes aesAlg = Aes.Create())
|
||||
{
|
||||
aesAlg.KeySize = 192;
|
||||
aesAlg.Mode = CipherMode.ECB;
|
||||
aesAlg.Padding = PaddingMode.None;
|
||||
aesAlg.Key = key;
|
||||
|
||||
// Create a decryptor to perform the stream transform.
|
||||
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
|
||||
|
||||
// Create the streams used for decryption.
|
||||
using (var msDecrypt = new MemoryStream())
|
||||
{
|
||||
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write))
|
||||
{
|
||||
csDecrypt.Write(encrypted, 0, encrypted.Length);
|
||||
csDecrypt.FlushFinalBlock();
|
||||
return msDecrypt.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] Encrypt(byte[] key, byte[] clear)
|
||||
{
|
||||
// Check arguments.
|
||||
if (clear == null || clear.Length <= 0)
|
||||
throw new ArgumentNullException("plainText");
|
||||
|
||||
if (key == null || key.Length <= 0)
|
||||
throw new ArgumentNullException("Key");
|
||||
|
||||
// Create an AesCryptoServiceProvider object
|
||||
// with the specified key and IV.
|
||||
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
|
||||
{
|
||||
aesAlg.KeySize = 192;
|
||||
aesAlg.Mode = CipherMode.ECB;
|
||||
aesAlg.Padding = PaddingMode.None;
|
||||
aesAlg.Key = key;
|
||||
|
||||
// Create an encryptor to perform the stream transform.
|
||||
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
|
||||
|
||||
// Create the streams used for encryption.
|
||||
using (var msEncrypt = new MemoryStream())
|
||||
{
|
||||
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
|
||||
{
|
||||
csEncrypt.Write(clear, 0, clear.Length);
|
||||
csEncrypt.FlushFinalBlock();
|
||||
return msEncrypt.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue