Walter.Cypher 2023.8.29.1040

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Walter.Cypher --version 2023.8.29.1040                
NuGet\Install-Package Walter.Cypher -Version 2023.8.29.1040                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Walter.Cypher" Version="2023.8.29.1040" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Walter.Cypher --version 2023.8.29.1040                
#r "nuget: Walter.Cypher, 2023.8.29.1040"                
#r directive can be used in F# Interactive and Polyglot Notebooks. 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=2023.8.29.1040

// Install Walter.Cypher as a Cake Tool
#tool nuget:?package=Walter.Cypher&version=2023.8.29.1040                

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 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 was computed.  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 netcoreapp3.1 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
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

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 342 11/21/2024
2024.11.14.1710 471 11/14/2024
2024.11.6.1222 385 11/6/2024
2024.10.28.1605 409 10/28/2024
2024.10.28.1335 385 10/28/2024
2024.10.19.1525 343 10/20/2024
2024.9.17.1417 1,282 9/17/2024
2024.9.12.1923 484 9/12/2024
2024.9.6.1352 499 9/7/2024
2024.9.4.1300 146 9/4/2024
2024.9.1.1143 503 9/1/2024
2024.8.19.1400 946 8/19/2024
2024.8.14.1256 898 8/14/2024
2024.8.12.958 516 8/12/2024
2024.8.5.1010 421 8/5/2024
2024.7.26.543 609 7/26/2024
2024.7.11.1604 465 7/11/2024
2024.7.9.1509 480 7/9/2024
2024.7.4.1424 482 7/4/2024
2024.7.3.1001 480 7/3/2024
2024.6.26.1408 889 6/28/2024
2024.6.6.1320 316 6/8/2024
2024.5.19.712 107 6/8/2024
2024.5.15.1634 310 5/15/2024
2024.5.14.829 221 5/14/2024
2024.5.13.1637 114 5/13/2024
2024.5.8.1005 256 5/8/2024
2024.4.4.2102 315 4/4/2024
2024.3.26.1111 219 3/26/2024
2024.3.19.2310 201 3/19/2024
2024.3.12.1022 219 3/12/2024
2024.3.7.836 242 3/7/2024
2024.3.6.1645 123 3/6/2024
2024.3.3.842 161 3/3/2024
2024.3.3.750 122 3/3/2024
2024.3.1.1143 139 3/1/2024
2024.2.27.1029 117 2/27/2024
2024.2.6.1959 147 2/6/2024
2023.10.12.1926 4,075 10/12/2023
2023.9.14.812 1,706 9/14/2023
2023.8.29.1040 9,333 8/29/2023
2023.8.17.903 1,825 8/17/2023
2023.8.9.1314 1,903 8/9/2023
2023.8.2.750 2,002 8/2/2023
2023.7.12.830 1,972 7/12/2023
2023.7.5.1419 2,092 7/6/2023
2023.6.14.1628 3,793 6/14/2023
2023.5.30.1640 2,488 5/30/2023
2023.5.4.1552 2,534 5/4/2023
2023.4.12.1236 6,889 4/12/2023
2023.3.14.1356 5,475 3/14/2023
2023.3.1.810 3,220 3/1/2023
2023.2.25.1185 890 2/25/2023
2023.2.22.27 5,615 2/22/2023
2023.2.15.1413 3,384 2/15/2023
2023.2.11.1628 3,390 2/11/2023
2023.1.11.534 3,666 1/11/2023
2022.12.14.648 12,796 12/14/2022
2022.11.27.1059 4,015 11/27/2022
2022.11.21.338 4,131 11/21/2022
2022.11.14.1819 4,309 11/14/2022
2022.11.14.1533 592 11/14/2022
2022.11.13.917 4,979 11/13/2022
2022.10.31.740 8,029 11/1/2022
2022.10.15.652 8,300 10/15/2022
2022.10.1.810 10,274 10/1/2022
2022.9.26.1444 10,910 9/26/2022
2022.9.14.809 9,580 9/14/2022
2022.9.8.1009 18,276 9/8/2022
2022.8.20.1007 9,747 8/20/2022
2022.8.1.1 10,012 7/31/2022
2022.7.15.841 18,901 7/15/2022
2022.7.1.1300 10,191 7/1/2022
2022.6.21.647 10,035 6/21/2022
2022.5.4.1010 36,515 5/4/2022
2022.4.10.828 29,343 4/10/2022
2022.3.26.1117 29,137 3/26/2022
2022.2.11.931 50,726 2/17/2022
2022.1.15.1312 20,958 1/17/2022
2022.1.10.537 20,040 1/10/2022
2022.1.7.1357 9,566 1/8/2022
2021.12.28.1452 10,979 12/28/2021
2021.12.15.911 10,287 12/16/2021 2021.12.15.911 is deprecated because it has critical bugs.
2021.11.19.850 37,959 11/19/2021
2021.11.11.1334 30,530 11/16/2021
2021.11.8.2109 8,949 11/9/2021
2021.11.8.1612 9,483 11/8/2021
2021.10.23.1310 51,973 10/25/2021
2021.10.13.1459 9,990 10/18/2021
2021.10.9.1116 88 10/9/2024
2021.10.9.821 456 10/10/2021
2021.9.26.1913 65,919 9/26/2021
2021.9.17.1702 15,288 9/18/2021
2021.8.30.1319 96,541 8/30/2021
2021.8.14.1600 53,571 8/16/2021
2021.8.14.829 5,677 8/14/2021
2021.8.8.1612 18,619 8/8/2021
2021.8.8.1138 424 8/8/2021
2021.7.22.1044 63,725 7/23/2021
2021.7.15.1547 10,031 7/15/2021
2021.7.12.734 9,826 7/13/2021
2021.6.26.1753 37,317 6/27/2021
2021.6.23.734 19,431 6/24/2021
2021.6.19.803 10,469 6/20/2021
2021.6.11.1600 37,518 6/13/2021
2021.6.9.1120 10,211 6/9/2021
2021.6.7.1407 2,561 6/7/2021
2021.5.28.1533 18,971 5/31/2021
2021.5.28.1451 10,170 5/31/2021
2021.5.25.1732 9,001 5/25/2021
2021.5.12.929 32,415 5/12/2021
2021.5.12.914 407 5/12/2021
2021.5.12.637 5,584 5/12/2021
2021.5.5.1901 33,310 5/6/2021
2021.5.2.1617 9,772 5/4/2021
2021.5.1.1505 10,069 5/1/2021
2021.4.28.1505 9,862 4/28/2021
2021.4.5.1653 63,965 4/5/2021
2021.4.1.913 9,962 4/1/2021
2021.3.31.1630 9,851 4/1/2021
2021.3.18.1608 10,299 3/18/2021
2021.3.3.1295 485 3/3/2021
2021.3.3.835 503 3/3/2021
2021.3.1.1205 24,770 3/2/2021
2021.3.1.1 17,156 2/27/2021
2021.2.21.1 16,605 2/21/2021
2021.2.19.3 8,969 2/20/2021
2021.2.19.2 8,704 2/19/2021
2021.2.18.2 7,739 2/19/2021
2021.2.18.1 450 2/19/2021
2021.2.16.1 17,028 2/16/2021
2021.2.10.1 38,551 2/10/2021
2021.2.9.1 7,619 2/9/2021
2021.2.8.1 476 2/9/2021
2021.2.7.1 14,462 2/6/2021
2020.12.27.1 13,866 12/27/2020
2020.12.26.3 20,205 12/27/2020
2020.12.26.2 505 12/27/2020
2020.12.24.2 529 12/26/2020
2020.12.24.1 478 12/24/2020
2020.12.18.1 7,764 12/19/2020
2020.12.15.1 13,957 12/15/2020
2020.12.14.5 13,119 12/14/2020
2020.12.14.4 7,132 12/14/2020
2020.12.14.3 6,920 12/14/2020
2020.11.27.1 68,571 11/27/2020
2020.11.25.1 13,277 11/25/2020
2020.11.23.1 501 11/25/2020
2020.11.22.2 8,824 11/23/2020
2020.11.20.1 8,086 11/21/2020
2020.11.19.3 8,136 11/19/2020
2020.11.11.1 65,299 11/11/2020
2020.10.9.5 142,099 10/9/2020
2020.10.5.1 71,927 10/5/2020
2020.10.4.1 545 10/4/2020
2020.10.1.1 19,129 10/1/2020
2020.9.24.2 24,229 9/24/2020
2020.9.12.1 50,904 9/12/2020
2020.9.8 17,715 9/8/2020
2020.9.6.5 5,374 9/6/2020
2020.9.6.4 533 9/6/2020
2020.9.6.2 1,779 9/6/2020
2020.9.3.1 14,567 9/3/2020

9 Augist 2023
     - Update to sevice packs of .net 6 and 7
     
     2 Augusted  2023
     - Update binaries

     14 June 2023
     - Update due to SDK Update 7.0.304, and 6.0.410

     31 May 2023
     - Update to new obfuscater version and MS Build update

     5 May 2023
     - Update due to new Obfuscation tool update

     14 Mar 2023
     - AddUpdate to latest Netwonsof t Json

     22 Feb 2023
     - Axel Imani Release (Go live)

     15 February 2023
     - Update to .net 6.0.406  and 7.0.3

     11 January 2023
     - update to 7.0.2, 6.0.13 SDK and build tools for 17.4.4
     - An SP for .net 3.1 was not provided by Microsoft at this time, we recommend migration away from 3.1 asap

     14 December 2022
     - Update to .Net SDK 3.1.426, 6.0.404 and 7.0.101

     27 November 2022
     - update package references

     21 November 2022
     - update to link NuGet changes .net 7.0

     14 November 2022
     - Update NuGet Packages
     - Link with .Net 7

     13 November 2022
     - Update NuGet packages
     - Remove support for pre-.net 6.0


     7 November 2022
     - Update to support .net 7

     31 October 2022
     - Update to build with new SDK

     1 October 2022
     - Update code sign certificate
     - Update SDK build


     14 September 2022
     - Update to include new package 6.0.2 and Microsoft CVE-2022-38013

     1 September 2022
     - Update MS build

     9 August 2022
     - update to SDK 6.0.400 / .Net 6.0.8 security patch
     - drop support for .net standard 2.0
     - drop support for .net 5.0

     15 June 2022
     - Update to support .net 6.0.7 and 3.1.27

     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