54 lines
1.5 KiB
C#

// 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);
}
}
}
}