Walter.Cypher
2023.2.25.1185
Prefix Reserved
See the version list below for details.
dotnet add package Walter.Cypher --version 2023.2.25.1185
NuGet\Install-Package Walter.Cypher -Version 2023.2.25.1185
<PackageReference Include="Walter.Cypher" Version="2023.2.25.1185" />
paket add Walter.Cypher --version 2023.2.25.1185
#r "nuget: Walter.Cypher, 2023.2.25.1185"
// Install Walter.Cypher as a Cake Addin #addin nuget:?package=Walter.Cypher&version=2023.2.25.1185 // Install Walter.Cypher as a Cake Tool #tool nuget:?package=Walter.Cypher&version=2023.2.25.1185
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
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 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.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | 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 (>= 6.0.0)
- Walter (>= 2023.2.25.1185)
-
.NETStandard 2.1
- System.Security.Cryptography.ProtectedData (>= 7.0.1)
- Walter (>= 2023.2.25.1185)
-
net6.0
- System.Security.Cryptography.ProtectedData (>= 7.0.1)
- Walter (>= 2023.2.25.1185)
-
net7.0
- System.Security.Cryptography.ProtectedData (>= 7.0.1)
- Walter (>= 2023.2.25.1185)
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.14.1710 | 34 | 11/14/2024 | |
2024.11.6.1222 | 376 | 11/6/2024 | |
2024.10.28.1605 | 403 | 10/28/2024 | |
2024.10.28.1335 | 365 | 10/28/2024 | |
2024.10.19.1525 | 337 | 10/20/2024 | |
2024.9.17.1417 | 1,278 | 9/17/2024 | |
2024.9.12.1923 | 480 | 9/12/2024 | |
2024.9.6.1352 | 495 | 9/7/2024 | |
2024.9.4.1300 | 144 | 9/4/2024 | |
2024.9.1.1143 | 496 | 9/1/2024 | |
2024.8.19.1400 | 942 | 8/19/2024 | |
2024.8.14.1256 | 894 | 8/14/2024 | |
2024.8.12.958 | 512 | 8/12/2024 | |
2024.8.5.1010 | 417 | 8/5/2024 | |
2024.7.26.543 | 605 | 7/26/2024 | |
2024.7.11.1604 | 461 | 7/11/2024 | |
2024.7.9.1509 | 476 | 7/9/2024 | |
2024.7.4.1424 | 478 | 7/4/2024 | |
2024.7.3.1001 | 476 | 7/3/2024 | |
2024.6.26.1408 | 885 | 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 | 238 | 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,040 | 10/12/2023 | |
2023.9.14.812 | 1,702 | 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,790 | 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,885 | 4/12/2023 | |
2023.3.14.1356 | 5,470 | 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,305 | 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 | 82 | 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,544 | 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,958 | 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,766 | 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,700 | 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,024 | 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,077 | 10/9/2020 | |
2020.10.5.1 | 71,908 | 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,900 | 9/12/2020 | |
2020.9.8 | 17,711 | 9/8/2020 | |
2020.9.6.5 | 5,372 | 9/6/2020 | |
2020.9.6.4 | 529 | 9/6/2020 | |
2020.9.6.2 | 1,777 | 9/6/2020 | |
2020.9.3.1 | 14,565 | 9/3/2020 |
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