Walter.Cypher
2024.3.12.1022
Prefix Reserved
See the version list below for details.
dotnet add package Walter.Cypher --version 2024.3.12.1022
NuGet\Install-Package Walter.Cypher -Version 2024.3.12.1022
<PackageReference Include="Walter.Cypher" Version="2024.3.12.1022" />
paket add Walter.Cypher --version 2024.3.12.1022
#r "nuget: Walter.Cypher, 2024.3.12.1022"
// Install Walter.Cypher as a Cake Addin #addin nuget:?package=Walter.Cypher&version=2024.3.12.1022 // Install Walter.Cypher as a Cake Tool #tool nuget:?package=Walter.Cypher&version=2024.3.12.1022
WALTER
Introducing the WALTER Framework: Workable Algorithms for Location-aware Transmission, Encryption Response. Designed for modern developers, WALTER is a groundbreaking suite of NuGet packages crafted for excellence in .NET Standard 2.0, 2.1, Core 3.1, and .NET 6, 7, 8, as well as C++ environments. Emphasizing 100% AoT support and reflection-free operations, this framework is the epitome of performance and stability.
Whether you're tackling networking, encryption, or secure communication, WALTER offers unparalleled efficiency and precision in processing, making it an essential tool for developers who prioritize speed and memory management in their applications.
About the Walter.Cypher Nuget Package
The cypher package for hashing data in a convenient and secure way as well as symmetric and asymmetric cross platform encryption methods. You can find On-line documentation at https://cypherapi.asp-waf.com as well as using the sample code found at https://github.com/ASP-WAF/Cypher
Walter.Cypher
This repository shows how you can use the Walter.Cypher NuGet package in your code using little code snippets.
Walter.Web.CypherTests sample code
This sample code shows the use of
- Fixed cypher using a password to protect your code.
- Generating checksum for tamper detection.
- PGP using various key strengths to protect data
- The use of Numeric encryption that can be used to defeat base64 scanning tools to detect cyphered constants for password probing as values can be stored in int64 type values
Get Started
Show how to cipher large amounts of text using the Crypto class
[TestMethod()]
public void CipherZip()
{
var sb = new StringBuilder();
for (var i = 0; i < 1024; i++)
{
sb.Append(DateTime.Now.ToString());
}
var test = sb.ToString();
var cypkered = Crypto.Zip(test);
var expect = Crypto.UnZip(cypkered);
Assert.AreEqual(test, expect);
}
Alternatively you can use the extension method
[TestMethod()]
public void CypherExtesnionTest()
{
var testpw = "65654616540546546";
var cypher = Environment.MachineName.Encrypt(testpw);
var clear = cypher.Decrypt(testpw);
Assert.AreEqual(Environment.MachineName, clear);
}
The extension method for cypher also allow encryption using public/private key encryption using certificates for text of any length
[TestMethod]
public void TestSmallStringAsBytes()
{
using X509Certificate2 encryptCertificate = GetCert(".cer");
using X509Certificate2 decryptCertificate = GetCert(".pfx", "01234456");
var certCypher = Environment.MachineName.AsEncryptedBytes(encryptCertificate);
var clearBytes = certCypher.AsDecryptFromBytes(decryptCertificate);
Assert.AreEqual(Environment.MachineName, UTF8Encoding.UTF8.GetString(clearBytes));
// helper method load embedded test certificate resource from assembly
static X509Certificate2 GetCert(string extension, string password = null)
{
var asam = Assembly.GetExecutingAssembly();
using (var memory = new MemoryStream())
using (var stream = asam.GetManifestResourceStream(asam.GetManifestResourceNames().First(f => f.EndsWith(extension))))
{
stream.CopyTo(memory);
return new X509Certificate2(memory.ToArray(), password);
}
}
}
[TestMethod]
public void TestLargeStringAsBytes()
{
using X509Certificate2 encryptCertificate = GetCert(".cer");
using X509Certificate2 cecryptCertificate = GetCert(".pfx","01234456");
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(Guid.NewGuid());
}
var text = sb.ToString();
var certCypher = text.AsEncryptedBytes(encryptCertificate);
Assert.AreNotEqual(certCypher.Length, text.Length);
var clearBytes = certCypher.AsDecryptFromBytes(cecryptCertificate);
Assert.AreEqual(text, UTF8Encoding.UTF8.GetString(clearBytes));
X509Certificate2 GetCert(string extension, string password = null)
{
var asam = Assembly.GetExecutingAssembly();
using (var memory = new MemoryStream())
using (var stream = asam.GetManifestResourceStream(asam.GetManifestResourceNames().First(f => f.EndsWith(extension))))
{
stream!.CopyTo(memory);
return new X509Certificate2(memory.ToArray(), password);
}
}
}
You also have the possibility to encrypt and decrypt persisted text based on the hosting machine, user executing the application, the application or process name this feature works on all platforms that support where that support the concept of users, processes and machine names in .NET and is ideal for storing secure data in memory that should not be possible to access when creating an application dump file but should survive a reboot.
There are some limitations on some IOT devices that might prevent you from using these features
public void RoundTrip_EncryptionScope_Process()
{
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(Guid.NewGuid());
}
var text = sb.ToString();
var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.Process);
Assert.AreNotEqual(certCypher.Length, text.Length);
var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.Process);
Assert.AreEqual(text, clearText);
}
[TestMethod()]
public void RoundTrip_EncryptionScope_User()
{
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(Guid.NewGuid());
}
var text = sb.ToString();
var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.User);
Assert.AreNotEqual(certCypher.Length, text.Length);
var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.User);
Assert.AreEqual(text, clearText);
}
[TestMethod()]
public void RoundTrip_EncryptionScope_Machine()
{
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(Guid.NewGuid());
}
var text = sb.ToString();
var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.Machine);
Assert.AreNotEqual(certCypher.Length, text.Length);
var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.Machine);
Assert.AreEqual(text, clearText);
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
-
.NETStandard 2.0
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
-
.NETStandard 2.1
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
-
net6.0
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
-
net7.0
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
-
net8.0
- System.Security.Cryptography.ProtectedData (>= 8.0.0)
- Walter (>= 2024.3.12.1022)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Walter.Cypher:
Package | Downloads |
---|---|
Walter.BOM
Internal NuGet package with business objects used by several ASP-WAF products Documentation available at https://firewallapi.asp-waf.com/?topic=html/N-Walter.BOM.htm |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
2024.11.20.1316 | 102 | 11/21/2024 | |
2024.11.14.1710 | 452 | 11/14/2024 | |
2024.11.6.1222 | 383 | 11/6/2024 | |
2024.10.28.1605 | 407 | 10/28/2024 | |
2024.10.28.1335 | 369 | 10/28/2024 | |
2024.10.19.1525 | 341 | 10/20/2024 | |
2024.9.17.1417 | 1,280 | 9/17/2024 | |
2024.9.12.1923 | 482 | 9/12/2024 | |
2024.9.6.1352 | 497 | 9/7/2024 | |
2024.9.4.1300 | 144 | 9/4/2024 | |
2024.9.1.1143 | 501 | 9/1/2024 | |
2024.8.19.1400 | 944 | 8/19/2024 | |
2024.8.14.1256 | 896 | 8/14/2024 | |
2024.8.12.958 | 514 | 8/12/2024 | |
2024.8.5.1010 | 419 | 8/5/2024 | |
2024.7.26.543 | 607 | 7/26/2024 | |
2024.7.11.1604 | 463 | 7/11/2024 | |
2024.7.9.1509 | 478 | 7/9/2024 | |
2024.7.4.1424 | 480 | 7/4/2024 | |
2024.7.3.1001 | 478 | 7/3/2024 | |
2024.6.26.1408 | 887 | 6/28/2024 | |
2024.6.6.1320 | 314 | 6/8/2024 | |
2024.5.19.712 | 105 | 6/8/2024 | |
2024.5.15.1634 | 308 | 5/15/2024 | |
2024.5.14.829 | 219 | 5/14/2024 | |
2024.5.13.1637 | 112 | 5/13/2024 | |
2024.5.8.1005 | 254 | 5/8/2024 | |
2024.4.4.2102 | 313 | 4/4/2024 | |
2024.3.26.1111 | 217 | 3/26/2024 | |
2024.3.19.2310 | 199 | 3/19/2024 | |
2024.3.12.1022 | 217 | 3/12/2024 | |
2024.3.7.836 | 240 | 3/7/2024 | |
2024.3.6.1645 | 121 | 3/6/2024 | |
2024.3.3.842 | 159 | 3/3/2024 | |
2024.3.3.750 | 120 | 3/3/2024 | |
2024.3.1.1143 | 137 | 3/1/2024 | |
2024.2.27.1029 | 115 | 2/27/2024 | |
2024.2.6.1959 | 145 | 2/6/2024 | |
2023.10.12.1926 | 4,073 | 10/12/2023 | |
2023.9.14.812 | 1,704 | 9/14/2023 | |
2023.8.29.1040 | 9,331 | 8/29/2023 | |
2023.8.17.903 | 1,823 | 8/17/2023 | |
2023.8.9.1314 | 1,901 | 8/9/2023 | |
2023.8.2.750 | 2,000 | 8/2/2023 | |
2023.7.12.830 | 1,970 | 7/12/2023 | |
2023.7.5.1419 | 2,090 | 7/6/2023 | |
2023.6.14.1628 | 3,791 | 6/14/2023 | |
2023.5.30.1640 | 2,486 | 5/30/2023 | |
2023.5.4.1552 | 2,532 | 5/4/2023 | |
2023.4.12.1236 | 6,887 | 4/12/2023 | |
2023.3.14.1356 | 5,473 | 3/14/2023 | |
2023.3.1.810 | 3,210 | 3/1/2023 | |
2023.2.25.1185 | 888 | 2/25/2023 | |
2023.2.22.27 | 5,613 | 2/22/2023 | |
2023.2.15.1413 | 3,382 | 2/15/2023 | |
2023.2.11.1628 | 3,388 | 2/11/2023 | |
2023.1.11.534 | 3,664 | 1/11/2023 | |
2022.12.14.648 | 12,794 | 12/14/2022 | |
2022.11.27.1059 | 4,011 | 11/27/2022 | |
2022.11.21.338 | 4,129 | 11/21/2022 | |
2022.11.14.1819 | 4,307 | 11/14/2022 | |
2022.11.14.1533 | 590 | 11/14/2022 | |
2022.11.13.917 | 4,977 | 11/13/2022 | |
2022.10.31.740 | 8,027 | 11/1/2022 | |
2022.10.15.652 | 8,298 | 10/15/2022 | |
2022.10.1.810 | 10,272 | 10/1/2022 | |
2022.9.26.1444 | 10,908 | 9/26/2022 | |
2022.9.14.809 | 9,578 | 9/14/2022 | |
2022.9.8.1009 | 18,274 | 9/8/2022 | |
2022.8.20.1007 | 9,745 | 8/20/2022 | |
2022.8.1.1 | 10,008 | 7/31/2022 | |
2022.7.15.841 | 18,899 | 7/15/2022 | |
2022.7.1.1300 | 10,189 | 7/1/2022 | |
2022.6.21.647 | 10,033 | 6/21/2022 | |
2022.5.4.1010 | 36,513 | 5/4/2022 | |
2022.4.10.828 | 29,341 | 4/10/2022 | |
2022.3.26.1117 | 29,135 | 3/26/2022 | |
2022.2.11.931 | 50,724 | 2/17/2022 | |
2022.1.15.1312 | 20,956 | 1/17/2022 | |
2022.1.10.537 | 20,038 | 1/10/2022 | |
2022.1.7.1357 | 9,564 | 1/8/2022 | |
2021.12.28.1452 | 10,977 | 12/28/2021 | |
2021.12.15.911 | 10,285 | 12/16/2021 | |
2021.11.19.850 | 37,957 | 11/19/2021 | |
2021.11.11.1334 | 30,528 | 11/16/2021 | |
2021.11.8.2109 | 8,947 | 11/9/2021 | |
2021.11.8.1612 | 9,481 | 11/8/2021 | |
2021.10.23.1310 | 51,971 | 10/25/2021 | |
2021.10.13.1459 | 9,988 | 10/18/2021 | |
2021.10.9.1116 | 86 | 10/9/2024 | |
2021.10.9.821 | 454 | 10/10/2021 | |
2021.9.26.1913 | 65,917 | 9/26/2021 | |
2021.9.17.1702 | 15,286 | 9/18/2021 | |
2021.8.30.1319 | 96,539 | 8/30/2021 | |
2021.8.14.1600 | 53,569 | 8/16/2021 | |
2021.8.14.829 | 5,675 | 8/14/2021 | |
2021.8.8.1612 | 18,617 | 8/8/2021 | |
2021.8.8.1138 | 422 | 8/8/2021 | |
2021.7.22.1044 | 63,723 | 7/23/2021 | |
2021.7.15.1547 | 10,029 | 7/15/2021 | |
2021.7.12.734 | 9,824 | 7/13/2021 | |
2021.6.26.1753 | 37,315 | 6/27/2021 | |
2021.6.23.734 | 19,429 | 6/24/2021 | |
2021.6.19.803 | 10,467 | 6/20/2021 | |
2021.6.11.1600 | 37,516 | 6/13/2021 | |
2021.6.9.1120 | 10,209 | 6/9/2021 | |
2021.6.7.1407 | 2,559 | 6/7/2021 | |
2021.5.28.1533 | 18,969 | 5/31/2021 | |
2021.5.28.1451 | 10,168 | 5/31/2021 | |
2021.5.25.1732 | 8,999 | 5/25/2021 | |
2021.5.12.929 | 32,413 | 5/12/2021 | |
2021.5.12.914 | 405 | 5/12/2021 | |
2021.5.12.637 | 5,582 | 5/12/2021 | |
2021.5.5.1901 | 33,308 | 5/6/2021 | |
2021.5.2.1617 | 9,770 | 5/4/2021 | |
2021.5.1.1505 | 10,067 | 5/1/2021 | |
2021.4.28.1505 | 9,860 | 4/28/2021 | |
2021.4.5.1653 | 63,963 | 4/5/2021 | |
2021.4.1.913 | 9,960 | 4/1/2021 | |
2021.3.31.1630 | 9,849 | 4/1/2021 | |
2021.3.18.1608 | 10,297 | 3/18/2021 | |
2021.3.3.1295 | 483 | 3/3/2021 | |
2021.3.3.835 | 501 | 3/3/2021 | |
2021.3.1.1205 | 24,768 | 3/2/2021 | |
2021.3.1.1 | 17,154 | 2/27/2021 | |
2021.2.21.1 | 16,603 | 2/21/2021 | |
2021.2.19.3 | 8,967 | 2/20/2021 | |
2021.2.19.2 | 8,702 | 2/19/2021 | |
2021.2.18.2 | 7,737 | 2/19/2021 | |
2021.2.18.1 | 446 | 2/19/2021 | |
2021.2.16.1 | 17,026 | 2/16/2021 | |
2021.2.10.1 | 38,549 | 2/10/2021 | |
2021.2.9.1 | 7,617 | 2/9/2021 | |
2021.2.8.1 | 474 | 2/9/2021 | |
2021.2.7.1 | 14,460 | 2/6/2021 | |
2020.12.27.1 | 13,864 | 12/27/2020 | |
2020.12.26.3 | 20,203 | 12/27/2020 | |
2020.12.26.2 | 503 | 12/27/2020 | |
2020.12.24.2 | 527 | 12/26/2020 | |
2020.12.24.1 | 476 | 12/24/2020 | |
2020.12.18.1 | 7,762 | 12/19/2020 | |
2020.12.15.1 | 13,955 | 12/15/2020 | |
2020.12.14.5 | 13,117 | 12/14/2020 | |
2020.12.14.4 | 7,130 | 12/14/2020 | |
2020.12.14.3 | 6,918 | 12/14/2020 | |
2020.11.27.1 | 68,569 | 11/27/2020 | |
2020.11.25.1 | 13,275 | 11/25/2020 | |
2020.11.23.1 | 499 | 11/25/2020 | |
2020.11.22.2 | 8,822 | 11/23/2020 | |
2020.11.20.1 | 8,084 | 11/21/2020 | |
2020.11.19.3 | 8,134 | 11/19/2020 | |
2020.11.11.1 | 65,297 | 11/11/2020 | |
2020.10.9.5 | 142,080 | 10/9/2020 | |
2020.10.5.1 | 71,925 | 10/5/2020 | |
2020.10.4.1 | 543 | 10/4/2020 | |
2020.10.1.1 | 19,127 | 10/1/2020 | |
2020.9.24.2 | 24,227 | 9/24/2020 | |
2020.9.12.1 | 50,902 | 9/12/2020 | |
2020.9.8 | 17,713 | 9/8/2020 | |
2020.9.6.5 | 5,372 | 9/6/2020 | |
2020.9.6.4 | 531 | 9/6/2020 | |
2020.9.6.2 | 1,777 | 9/6/2020 | |
2020.9.3.1 | 14,565 | 9/3/2020 |
7 March 2024
- Update to allow trimming and A0T compilation under .net 8
16 November 2023
- Update to add support for .net 8
14 September 2023
- SDK Service pack .net 6 and 7
9 August 2023
- Update to sevice packs of .net 6 and 7
2 Augusted 2023
- Update binaries