public static string Generate(RNGCryptoServiceProvider provider, int entropy) { var pswBytes = new byte[entropy]; provider.GetBytes(pswBytes); var encoder = new Base85(Base85Alphabet.Ascii85); return(encoder.Encode(pswBytes)); }
public string Generate(int entropy) { var pswBytes = new byte[entropy]; _rngCsp.GetBytes(pswBytes); var encoder = new Base85(Base85Alphabet.Ascii85); return(encoder.Encode(pswBytes)); }
public void TestBase85() { // Encode string test = StringHelper.RandomString(100_000); ReadOnlySpan <char> encoded = Base85.Encode(Encoding.UTF8.GetBytes(test), 0, test.Length); //Console.WriteLine(encoded.ToString()); // Decode byte[] decoded = Base85.Decode(encoded, 0, encoded.Length).ToArray(); //Console.WriteLine(Encoding.UTF8.GetString(decoded)); Assert.AreEqual(test, decoded); Assert.Pass(); }
public static Func <object, string> GetSerializer(Type primitiveType) { if (generatedSerializers.TryGetValue(primitiveType.GUID, out var func)) { return(func); } if (primitiveType == typeof(string)) { func = x => (string)x; } else if (primitiveType == typeof(DateTime)) { func = x => ((DateTime)x).Ticks.ToString(); } //use fixed format provider to avoid ',' as decimal separator, it is used as delimiter for array elements. else if (primitiveType == typeof(double)) { func = x => ((double)x).ToString("R", System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } else if (primitiveType == typeof(float)) { func = x => ((float)x).ToString("R", System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } //compress space for integer arrays by using a base 85 encoding instead of base 10. else if (primitiveType == typeof(sbyte) || primitiveType == typeof(byte) || primitiveType == typeof(short) || primitiveType == typeof(ushort) || primitiveType == typeof(int)) { func = x => Base85.Encode(Convert.ToInt32(x)); } else if (primitiveType == typeof(uint) || primitiveType == typeof(long)) { func = x => Base85.Encode(Convert.ToInt64(x)); } else { throw new InvalidOperationException(); } generatedSerializers.AddOrUpdate(primitiveType.GUID, func, (guid, s) => func); return(func); }
public static Func <string, object> GetDeserializer(Type primitiveType) { if (generatedDeserializers.TryGetValue(primitiveType.GUID, out var func)) { return(func); } if (primitiveType == typeof(string)) { func = x => x; } else if (primitiveType == typeof(DateTime)) { func = x => new DateTime(Int64.Parse(x)); } else if (primitiveType == typeof(double)) { func = x => Double.Parse(x, System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } else if (primitiveType == typeof(float)) { func = x => Single.Parse(x, System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } else if (primitiveType == typeof(sbyte) || primitiveType == typeof(byte) || primitiveType == typeof(short) || primitiveType == typeof(ushort) || primitiveType == typeof(int)) { func = x => Convert.ChangeType(Base85.DecodeInt32(x), primitiveType); } else if (primitiveType == typeof(uint) || primitiveType == typeof(long)) { func = x => Convert.ChangeType(Base85.DecodeInt64(x), primitiveType); } else { throw new InvalidOperationException(); } generatedDeserializers.AddOrUpdate(primitiveType.GUID, func, (guid, s) => func); return(func); }
public void SetUp() { Converter = new Base85(); }
public void TestDecode() { string decoded = Encoding.UTF8.GetString(Base85.Decode(ENCODED_TEXT)); Assert.True(decoded.Equals(PLAIN_TEXT), "Decoded value is not the same as the expected."); }
public void TestEncode() { string encoded = Base85.Encode(Encoding.UTF8.GetBytes(PLAIN_TEXT)); Assert.True(encoded.Equals(ENCODED_TEXT), "Encoded value is not the same as the expected."); }
public static DescrambledMessage Decode(string scrambledString, bool recursive, MdbReader reader) { if (reader == null) { reader = new MdbReader(); } if (scrambledString.Length < 2) { throw new Exception("Invalid message length!"); } if (!scrambledString.StartsWith("~")) { throw new Exception("Invalid message start! Expecting: ~"); } if (!scrambledString.EndsWith("~") && !recursive) { throw new Exception("Invalid message end! Expecting: ~"); } scrambledString = scrambledString.Substring(1); if (!recursive) { scrambledString = scrambledString.Substring(0, scrambledString.Length - 1); } DescrambledMessage aoDescrambledMessage = new DescrambledMessage(0, 0, null); MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(scrambledString)); while (true) { if (stream.Position >= stream.Length) { break; } //string type = char.ConvertFromUtf32(stream.ReadByte()); /* Not Supported on Mono */ string type = Convert.ToChar(stream.ReadByte()).ToString(); switch (type) { case "&": // Message start, Category ID and Entry ID aoDescrambledMessage = new DescrambledMessage( Base85.Decode(Read(stream, 5)), Base85.Decode(Read(stream, 5)), "~" + scrambledString + "~" ); break; case "s": // String Int32 textSize = stream.ReadByte(); String text = Read(stream, textSize - 1); aoDescrambledMessage.Append(new DescrambledArgument(text)); break; case "i": // Integer Int32 integer = Base85.Decode(Read(stream, 5)); aoDescrambledMessage.Append(new DescrambledArgument(integer)); break; case "u": // Unsigned Integer UInt32 unsignedInteger = (UInt32)Base85.Decode(Read(stream, 5)); aoDescrambledMessage.Append(new DescrambledArgument(unsignedInteger)); break; case "f": // Float Single single = (Single)Base85.Decode(Read(stream, 5)); aoDescrambledMessage.Append(new DescrambledArgument(single)); break; case "R": // Reference, Category ID and Entry ID String referenceMessage = string.Empty; Int32 referenceCategoryID = Base85.Decode(Read(stream, 5)); Int32 referenceEntryID = Base85.Decode(Read(stream, 5)); if (reader != null) { MdbEntry referenceEntry = reader.GetEntry(referenceCategoryID, referenceEntryID); if (referenceEntry != null) { referenceMessage = referenceEntry.Message; } } DescrambledArgument reference = new DescrambledArgument( referenceCategoryID, referenceEntryID, referenceMessage ); aoDescrambledMessage.Append(reference); break; case "F": // Recursive, Complete new message Int32 recursiveSize = stream.ReadByte(); String recursiveText = Read(stream, recursiveSize - 1); aoDescrambledMessage.Append(new DescrambledArgument(Decode(recursiveText, true, reader))); break; default: throw new Exception("Unknown type detected: " + type); } } if (reader != null) { MdbEntry entry = reader.GetEntry(aoDescrambledMessage.CategoryID, aoDescrambledMessage.EntryID); if (entry != null) { try { aoDescrambledMessage.Message = String.Format(PrintfToFormatString(entry.Message), aoDescrambledMessage.Arguments); } catch { } } } return(aoDescrambledMessage); }
private Base GetMethod() { Base method = null; string alphabet = tbAlphabet.Text; if (tbSpecialChar.Text.Length > 1) throw new ArgumentException("Special char should contains one symbol"); char special = string.IsNullOrWhiteSpace(tbSpecialChar.Text) ? (char)0 : tbSpecialChar.Text[0]; Encoding textEncoding = cmbTextEncoding.SelectedItem != null ? (Encoding)((ComboBoxItem)cmbTextEncoding.SelectedItem).Value : null; bool parallel = cbParallel.Checked; switch (cmbMethod.SelectedItem.ToString()) { case "Base32": method = new Base32(alphabet, special, textEncoding); break; case "Base64": method = new Base64(alphabet, special, textEncoding, parallel); break; case "Base128": method = new Base128(alphabet, special, textEncoding); break; case "Base256": method = new Base256(alphabet, special, textEncoding); break; case "Base1024": method = new Base1024(alphabet, special, textEncoding); break; case "Base4096": method = new Base4096(alphabet, special, textEncoding); break; case "ZBase32": method = new ZBase32(alphabet, special, textEncoding); break; case "Base85": method = new Base85(alphabet, special, cbPrefixPostfix.Checked, textEncoding); break; case "Base91": method = new Base91(alphabet, special, textEncoding); break; case "BaseN": method = new BaseN(alphabet, (uint)nudMaxBitsCount.Value, textEncoding, cbReverseOrder.Checked, parallel); break; case "BaseBigN": method = new BaseBigN(alphabet, (uint)nudMaxBitsCount.Value, textEncoding, cbReverseOrder.Checked, parallel, cbMaxCompression.Checked); break; } tbBitsPerChars.Text = method.BlockBitsCount + "/" + method.BlockCharsCount; tbRatio.Text = ((double)method.BlockBitsCount / method.BlockCharsCount).ToString("0.000000"); nudAlphabetLength.Value = method.CharsCount; return method; }
private Base GetMethod() { Base method = null; string alphabet = tbAlphabet.Text; if (tbSpecialChar.Text.Length > 1) { throw new ArgumentException("Special char should contains one symbol"); } char special = string.IsNullOrWhiteSpace(tbSpecialChar.Text) ? (char)0 : tbSpecialChar.Text[0]; Encoding textEncoding = cmbTextEncoding.SelectedItem != null ? (Encoding)((ComboBoxItem)cmbTextEncoding.SelectedItem).Value : null; bool parallel = cbParallel.Checked; switch (cmbMethod.SelectedItem.ToString()) { case "Base32": method = new Base32(alphabet, special, textEncoding); break; case "Base64": method = new Base64(alphabet, special, textEncoding, parallel); break; case "Base128": method = new Base128(alphabet, special, textEncoding); break; case "Base256": method = new Base256(alphabet, special, textEncoding); break; case "Base1024": method = new Base1024(alphabet, special, textEncoding); break; case "Base4096": method = new Base4096(alphabet, special, textEncoding); break; case "ZBase32": method = new ZBase32(alphabet, special, textEncoding); break; case "Base85": method = new Base85(alphabet, special, cbPrefixPostfix.Checked, textEncoding); break; case "Base91": method = new Base91(alphabet, special, textEncoding); break; case "BaseN": method = new BaseN(alphabet, (uint)nudMaxBitsCount.Value, textEncoding, cbReverseOrder.Checked, parallel); break; case "BaseBigN": method = new BaseBigN(alphabet, (uint)nudMaxBitsCount.Value, textEncoding, cbReverseOrder.Checked, parallel, cbMaxCompression.Checked); break; } tbBitsPerChars.Text = method.BlockBitsCount + "/" + method.BlockCharsCount; tbRatio.Text = ((double)method.BlockBitsCount / method.BlockCharsCount).ToString("0.000000"); nudAlphabetLength.Value = method.CharsCount; return(method); }