Walter.Cypher 2022.5.4.1010 The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved

.NET 5.0 .NET Core 3.1 .NET Standard 2.0
Install-Package Walter.Cypher -Version 2022.5.4.1010
dotnet add package Walter.Cypher --version 2022.5.4.1010
<PackageReference Include="Walter.Cypher" Version="2022.5.4.1010" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Walter.Cypher --version 2022.5.4.1010
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Walter.Cypher, 2022.5.4.1010"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Walter.Cypher as a Cake Addin
#addin nuget:?package=Walter.Cypher&version=2022.5.4.1010

// Install Walter.Cypher as a Cake Tool
#tool nuget:?package=Walter.Cypher&version=2022.5.4.1010
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

The cypher package for hashing data in a convenient and secure way as well as symmetric and asymmetric 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

Cypher ICON 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

  1. Fixed cypher using a password to protect your code.
  2. Generating checksum for tamper detection.
  3. PGP using various key strengths to protect data
  4. 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
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Walter.Cypher:

Package Downloads
Walter.BOM The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

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
2022.5.4.1010 417 5/4/2022
2022.4.10.828 1,616 4/10/2022
2022.3.26.1117 2,049 3/26/2022
2022.2.11.931 4,079 2/17/2022
2022.1.15.1312 2,516 1/17/2022
2022.1.10.537 3,606 1/10/2022
2022.1.7.1357 2,036 1/8/2022
2021.12.28.1452 2,896 12/28/2021
2021.12.15.911 3,199 12/16/2021
2021.11.19.850 13,508 11/19/2021
2021.11.11.1334 11,654 11/16/2021
2021.11.8.2109 2,719 11/9/2021
2021.11.8.1612 3,192 11/8/2021
2021.10.23.1310 19,399 10/25/2021
2021.10.13.1459 3,609 10/18/2021
2021.10.9.821 184 10/10/2021
2021.9.26.1913 25,722 9/26/2021
2021.9.17.1702 5,329 9/18/2021
2021.8.30.1319 35,879 8/30/2021
2021.8.14.1600 20,088 8/16/2021
2021.8.14.829 1,889 8/14/2021
2021.8.8.1612 6,829 8/8/2021
2021.8.8.1138 154 8/8/2021
2021.7.22.1044 23,535 7/23/2021
2021.7.15.1547 3,229 7/15/2021
2021.7.12.734 3,507 7/13/2021
2021.6.26.1753 13,755 6/27/2021
2021.6.23.734 6,960 6/24/2021
2021.6.19.803 3,774 6/20/2021
2021.6.11.1600 14,272 6/13/2021
2021.6.9.1120 3,628 6/9/2021
2021.6.7.1407 740 6/7/2021
2021.5.28.1533 6,763 5/31/2021
2021.5.28.1451 3,474 5/31/2021
2021.5.25.1732 3,049 5/25/2021
2021.5.12.929 11,155 5/12/2021
2021.5.12.914 154 5/12/2021
2021.5.12.637 1,812 5/12/2021
2021.5.5.1901 10,795 5/6/2021
2021.5.2.1617 3,332 5/4/2021
2021.5.1.1505 3,388 5/1/2021
2021.4.28.1505 3,228 4/28/2021
2021.4.5.1653 22,473 4/5/2021
2021.4.1.913 3,165 4/1/2021
2021.3.31.1630 3,201 4/1/2021
2021.3.18.1608 3,340 3/18/2021
2021.3.3.1295 224 3/3/2021
2021.3.3.835 208 3/3/2021
2021.3.1.1205 8,736 3/2/2021
2021.3.1.1 6,119 2/27/2021
2021.2.21.1 5,839 2/21/2021
2021.2.19.3 2,967 2/20/2021
2021.2.19.2 2,923 2/19/2021
2021.2.18.2 2,517 2/19/2021
2021.2.18.1 178 2/19/2021
2021.2.16.1 6,211 2/16/2021
2021.2.10.1 13,495 2/10/2021
2021.2.9.1 2,690 2/9/2021
2021.2.8.1 191 2/9/2021
2021.2.7.1 5,270 2/6/2021
2020.12.27.1 5,135 12/27/2020
2020.12.26.3 6,872 12/27/2020
2020.12.26.2 224 12/27/2020
2020.12.24.2 258 12/26/2020
2020.12.24.1 223 12/24/2020
2020.12.18.1 2,760 12/19/2020
2020.12.15.1 5,156 12/15/2020
2020.12.14.5 4,792 12/14/2020
2020.12.14.4 2,647 12/14/2020
2020.12.14.3 2,420 12/14/2020
2020.11.27.1 25,823 11/27/2020
2020.11.25.1 4,787 11/25/2020
2020.11.23.1 219 11/25/2020
2020.11.22.2 3,429 11/23/2020
2020.11.20.1 2,870 11/21/2020
2020.11.19.3 2,955 11/19/2020
2020.11.11.1 24,656 11/11/2020
2020.10.9.5 53,357 10/9/2020
2020.10.5.1 25,694 10/5/2020
2020.10.4.1 251 10/4/2020
2020.10.1.1 6,555 10/1/2020
2020.9.24.2 8,394 9/24/2020
2020.9.12.1 17,906 9/12/2020
2020.9.8 6,186 9/8/2020
2020.9.6.5 1,727 9/6/2020
2020.9.6.4 262 9/6/2020
2020.9.6.2 696 9/6/2020
2020.9.3.1 4,457 9/3/2020

26 March 2022
- Update NuGet package references

27 December 2021
- Enable Numeric cypher for .net 6.0


15 December 2021
- Update package references as well as .Net DSK release December 14 2021

11 December 2021
- Add extension method to encrypt using PGP RSA for Strings to byte[] and back

6 December 2021
- Add several extensions to the encryption extension helper method including certificate encryption/ decryption

9 November 2021
- Fix package dependency on vulnerable packages from Microsoft by upgrading vulnerable packages

8 November 2021
- Update to Microsoft packages 6.0.0, 5.0.403 and core 3.1.415

11 October 2021
- CodeSign the binaries as well as the NuGet package for executing in a trust-platform


17 September 2021
- Update NuGet Packages to the new release

14 August 2021
- Update NuGet package dependencies

8 Aug 2021
- update to .NET 6.0 SDK (v6.0.100-preview.6)

22 June 2021
- Change cypher methods to use the core types and not the managed types to be compatible with .Net 6.0
- Include .Net 6.0 output

15 June 2021
- Update to .Net core 3.1.17 and :net 5.0.8
.
19 June 2021
- Update package reference external dependencies

25 May 2021
- Update package reference external dependencies

25 April 2021
- Update Package references

21 March 2021
- Update Package references

06 March 2021
- Update Package references
- Extend PGP allow export and import key
- Add static method for PGPManaged

01 February 2021
- Update Package references

18 February 2021
- Add session PGP keyring support in PGPKeyGenerator (less secure for memory based attacks when a malicious user has access to the device)

10 February 2021
- Update package references
- Add logging interface for extracting calling file name when faced with cypher errors

30 January 2021
- Update speed improvement
- Update package references

25 January 2021
- Update extension methods
- Update Package references

02 January 2021
- Updated license terms
- Update Package references

24 December 2020
- Update Package references
- Remove support for .net48

15 December 2020
- Update Package references

19 November 2020
1. Update package references

11 November 2020
1. Update package and add support for .net 5.0

09 October 2020
1. package update

24 September 2020
1. Update package references

06  September 2020
1. Set platform x64
2. Update NuGet Package References

26 August 2020
1. Update dependency on NuGet packages

12 August 2020 release
1. Update dependency on NuGet packages

13 June 2020 release
1. Update exception reporting
2. Update obfuscation settings to include file and line numbers

11 June 2020 release
1. Add Ticket service for incident reporting when the TicketService.ExceptionReporting is set to true (default false)

2020.6.10.
1. Update NuGet package License Manager

2020.06.01. version contains
1. Password based encryption
2. Secured compressed data
3. Asymmetric public, private data protection using key-rings with public and private key

Probing cipher keys using exceptions are disabled by re-throwing exceptions removing the details that are used by attack vectors.

Bugs fixed:
1. Saving >4gb data is now supported