generated from karsten.jeppesen/KAJE-Template
Quizzer-8: Migrating to .NET 10
This commit is contained in:
109
Quizzer-8/Quizzer/Extensions/Extensions.cs
Normal file
109
Quizzer-8/Quizzer/Extensions/Extensions.cs
Normal file
@@ -0,0 +1,109 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.IO.Compression;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace Quizzer.Extensions
|
||||
{
|
||||
public static class Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Compresses a string and returns a deflate compressed, Base64 encoded string.
|
||||
/// </summary>
|
||||
/// <param name="uncompressedString">String to compress</param>
|
||||
public static string Compress(this string uncompressedString)
|
||||
{
|
||||
byte[] compressedBytes;
|
||||
|
||||
using (var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(uncompressedString)))
|
||||
{
|
||||
using (var compressedStream = new MemoryStream())
|
||||
{
|
||||
// setting the leaveOpen parameter to true to ensure that compressedStream will not be closed when compressorStream is disposed
|
||||
// this allows compressorStream to close and flush its buffers to compressedStream and guarantees that compressedStream.ToArray() can be called afterward
|
||||
// although MSDN documentation states that ToArray() can be called on a closed MemoryStream, I don't want to rely on that very odd behavior should it ever change
|
||||
using (var compressorStream = new DeflateStream(compressedStream, CompressionLevel.Fastest, true))
|
||||
{
|
||||
uncompressedStream.CopyTo(compressorStream);
|
||||
}
|
||||
|
||||
// call compressedStream.ToArray() after the enclosing DeflateStream has closed and flushed its buffer to compressedStream
|
||||
compressedBytes = compressedStream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
return Convert.ToBase64String(compressedBytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decompresses a deflate compressed, Base64 encoded string and returns an uncompressed string.
|
||||
/// </summary>
|
||||
/// <param name="compressedString">String to decompress.</param>
|
||||
public static string Decompress(this string compressedString)
|
||||
{
|
||||
byte[] decompressedBytes;
|
||||
|
||||
var compressedStream = new MemoryStream(Convert.FromBase64String(compressedString));
|
||||
|
||||
using (var decompressorStream = new DeflateStream(compressedStream, CompressionMode.Decompress))
|
||||
{
|
||||
using (var decompressedStream = new MemoryStream())
|
||||
{
|
||||
decompressorStream.CopyTo(decompressedStream);
|
||||
|
||||
decompressedBytes = decompressedStream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
return Encoding.UTF8.GetString(decompressedBytes);
|
||||
}
|
||||
/// <summary>
|
||||
/// Hashes the string using SHA256
|
||||
/// </summary>
|
||||
/// <param name="plaintext">
|
||||
/// What needs to be hashed
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// The hash
|
||||
/// </returns>
|
||||
public static string HashSHA256(this string plaintext)
|
||||
{
|
||||
StringBuilder Sb = new StringBuilder();
|
||||
|
||||
using (var hash = SHA256.Create())
|
||||
{
|
||||
Encoding enc = Encoding.UTF8;
|
||||
byte[] result = hash.ComputeHash(enc.GetBytes(plaintext));
|
||||
|
||||
foreach (byte b in result)
|
||||
Sb.Append(b.ToString("x2"));
|
||||
}
|
||||
|
||||
return Sb.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// Hashes the string using MD5
|
||||
/// </summary>
|
||||
/// <param name="plaintext">
|
||||
/// What needs to be hashed
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// The hash
|
||||
/// </returns>
|
||||
public static string HashMD5(this string plaintext)
|
||||
{
|
||||
StringBuilder Sb = new StringBuilder();
|
||||
|
||||
using (var hash = MD5.Create())
|
||||
{
|
||||
Encoding enc = Encoding.UTF8;
|
||||
byte[] result = hash.ComputeHash(enc.GetBytes(plaintext));
|
||||
|
||||
foreach (byte b in result)
|
||||
Sb.Append(b.ToString("x2"));
|
||||
}
|
||||
|
||||
return Sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user