/// <summary>
/// WCFでAOPのLogのパラメータ(タイプはパスワード)の難度化方法
/// </summary>
/// <param name="szString">入力の文字列</param>
/// <returns>難度化の文字列</returns>
public static string EncryptedPasswordData(string szString)
{
if (string.IsNullOrEmpty(szString)) return string.Empty;
szString = szString.Trim();
var bytes = Encoding.Default.GetBytes(szString);
var rBytes = new byte[bytes.Length * 2];
var rnd = new Random();
for (int i = 0, j = 0; i < bytes.Length; i++)
{
var nRand = rnd.Next(1, 0xFF);
rBytes[j] = (byte)(nRand & 0xFF);
rBytes[j + 1] = (byte)(rBytes[j] ^ bytes[i]);
if (rBytes[j + 1].Equals(0x00))
{
i--;
continue;
}
j += 2;
}
return Convert.ToBase64String(rBytes);
}
/// <summary>
/// WCFでAOPのLogのパラメータ(タイプはパスワード)の難度化を解読方法
/// </summary>
/// <param name="szString">入力の文字列</param>
/// <returns>解読難度化の文字列</returns>
public static string DecryptedPasswordData(string szString)
{
if (string.IsNullOrEmpty(szString)) return string.Empty;
var bytes = Convert.FromBase64String(szString);
var rBytes = new byte[bytes.Length / 2];
for (int i = 0, j = 0; i < bytes.Length; i++)
{
if ((i % 2) == 0)
{
continue;
}
rBytes[j++] = (byte)(bytes[i - 1] ^ bytes[i]);
}
return Encoding.Default.GetString(rBytes);
}