using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Text;
namespace P4Connect
{
public class Secure
{
///
/// Encrypts a string
///
public static string EncryptString(string aInput)
{
return Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(aInput));
}
///
/// Decrypts a string
///
public static string DecryptString(string aEncryptedString)
{
try
{
return Encoding.UTF8.GetString(Convert.FromBase64String(aEncryptedString));
}
catch (Exception)
{
return "";
}
}
#if false
// An arbitrary string used to encrypt the password
static readonly byte[] Entropy = System.Text.Encoding.Unicode.GetBytes("I like P4Connect and I want to use it");
///
/// Encrypts a string
///
public static string EncryptStringS(string aInput)
{
var s = ToSecureString(aInput);
Debug.Log("Encrypted: " + s.ToStringNullSafe());
return EncryptSecureString(ToSecureString(aInput));
}
///
/// Decrypts a string
///
public static string DecryptStringS(string aEncryptedString)
{
return ToInsecureString(DecryptSecureString(aEncryptedString));
}
// These methods were taken from http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx
static string EncryptSecureString(System.Security.SecureString input)
{
byte[] encryptedData = System.Security.Cryptography.ProtectedData.Protect(
System.Text.Encoding.Unicode.GetBytes(ToInsecureString(input)),
Entropy,
System.Security.Cryptography.DataProtectionScope.CurrentUser);
return System.Convert.ToBase64String(encryptedData);
}
static string EncryptSecureString1(System.Security.SecureString input)
{
}
static SecureString DecryptSecureString(string encryptedData)
{
try
{
byte[] decryptedData = System.Security.Cryptography.ProtectedData.Unprotect(
System.Convert.FromBase64String(encryptedData),
Entropy,
System.Security.Cryptography.DataProtectionScope.CurrentUser);
return ToSecureString(System.Text.Encoding.Unicode.GetString(decryptedData));
}
catch
{
return new SecureString();
}
}
static SecureString ToSecureString(string input)
{
System.Console.WriteLine("ToSecureString: " + input);
var secure = new SecureString();
if (input.Length > 0)
{
foreach (var c in input.ToCharArray())
secure.AppendChar(c);
}
//secure.MakeReadOnly();
return secure;
}
static string ToInsecureString(SecureString input)
{
string returnValue = string.Empty;
System.IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(input);
try
{
returnValue = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr);
}
finally
{
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
}
return returnValue;
}
#endif
}
}