// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT using System; using System.Security.Cryptography; namespace Launcher { public static class Secure { public static string Encode(string decoded, string key) { if (String.IsNullOrEmpty(decoded) || String.IsNullOrEmpty(key)) return ""; byte[] data = new byte[decoded.Length]; for (int i = 0; i < decoded.Length; i++) data[i] = (byte)decoded[i]; try { byte[] v2 = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser); return Convert.ToBase64String(v2); } catch { // XORs data. *NOT* very secure, only designed to prevent reading from options.txt. for (int i = 0; i < data.Length; i++) data[i] = (byte)(data[i] ^ key[i % key.Length] ^ 0x43); return Convert.ToBase64String(data); } } public static string Decode(string encoded, string key) { if (String.IsNullOrEmpty(encoded) || String.IsNullOrEmpty(key)) return ""; byte[] data; try { data = Convert.FromBase64String(encoded); } catch (FormatException) { return ""; } try { data = ProtectedData.Unprotect(data, null, DataProtectionScope.CurrentUser); char[] c = new char[data.Length]; for (int i = 0; i < c.Length; i++) c[i] = (char)data[i]; return new String(c); } catch { if (encoded.Length > 64 || data.Length > 64) return ""; char[] c = new char[data.Length]; for (int i = 0; i < c.Length; i++) c[i] = (char)(data[i] ^ key[i % key.Length] ^ 0x43); return new String(c); } } } }