Browse Source

appsetting解密

fly 10 months ago
parent
commit
cd66448318
3 changed files with 149 additions and 43 deletions
  1. 103 0
      Config/ConfigCrypter.cs
  2. 21 19
      Config/ParameterDictionarySerializer.cs
  3. 25 24
      Config/ParameterSerializer.cs

+ 103 - 0
Config/ConfigCrypter.cs

@@ -0,0 +1,103 @@
+using System;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+using WingServerCommon.Log;
+
+namespace WingServerCommon.Config
+{
+    public class ConfigCrypter
+    {
+        // Defalt key vector
+        private byte[] _keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
+        private string _defaultKey = "vinno123";
+
+        /// <summary>
+        /// DES encrypt string.
+        /// </summary>
+        /// <param name="encryptString">String to be encrypted</param>
+        /// <param name="encryptKey">encrypt key,8 characters</param>
+        /// <returns>Return encrypted string while success,empty string will be return while failed.</returns>
+        public string EncryptDES(string encryptString, string encryptKey = "")
+        {
+            try
+            {
+                var needEncrypt = !IsBase64Formatted(encryptString);
+                if (needEncrypt)
+                {
+                    encryptKey = string.IsNullOrEmpty(encryptKey) ? _defaultKey : encryptKey;
+                    var rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
+                    var rgbIV = _keys;
+                    var inputByteArray = Encoding.UTF8.GetBytes(encryptString);
+                    var dCSP = new DESCryptoServiceProvider();
+                    var mStream = new MemoryStream();
+                    var cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
+                    cStream.Write(inputByteArray, 0, inputByteArray.Length);
+                    cStream.FlushFinalBlock();
+                    var asdsad = Convert.ToBase64String(mStream.ToArray());
+                    return Convert.ToBase64String(mStream.ToArray());
+                }
+                else
+                {
+                    return encryptString;
+                }
+            }
+            catch (Exception e)
+            {
+                Logger.WriteLineError($"Encrypt failed:{e}");
+                return string.Empty;
+            }
+        }
+
+        /// <summary>
+        /// DES decrypt string
+        /// </summary>
+        /// <param name="decryptString">String to be decrypted</param>
+        /// <param name="decryptKey">decrypt key,8 characters,same as encrypt key.</param>
+        /// <returns>Return decrypted string while success,source string will be return while failed.</returns>
+        public string DecryptDES(string decryptString, string decryptKey = "")
+        {
+            if (string.IsNullOrEmpty(decryptString))
+            {
+                return string.Empty;
+            }
+            var needDecrypt = IsBase64Formatted(decryptString);
+            if (needDecrypt)
+            {
+                try
+                {
+                    decryptKey = string.IsNullOrEmpty(decryptKey) ? _defaultKey : decryptKey;
+                    var rgbKey = Encoding.UTF8.GetBytes(decryptKey);
+                    var rgbIV = _keys;
+                    var inputByteArray = Convert.FromBase64String(decryptString);
+                    var DCSP = new DESCryptoServiceProvider();
+                    var mStream = new MemoryStream();
+                    var cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
+                    cStream.Write(inputByteArray, 0, inputByteArray.Length);
+                    cStream.FlushFinalBlock();
+                    var asdasd = Encoding.UTF8.GetString(mStream.ToArray());
+                    return Encoding.UTF8.GetString(mStream.ToArray());
+                }
+                catch (Exception e)
+                {
+                    Logger.WriteLineError($"decrypt failed:{e}");
+                    return decryptString;
+                }
+            }
+            return decryptString;
+        }
+
+        private bool IsBase64Formatted(string input)
+        {
+            try
+            {
+                Convert.FromBase64String(input);
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+    }
+}

+ 21 - 19
Config/ParameterDictionarySerializer.cs

@@ -22,7 +22,9 @@ namespace WingServerCommon.Config.Parameters
             {
                 content = str;
             }
-            //TODO Decrypt text
+            //Decrypt text
+            var configCrypter = new ConfigCrypter();
+            content = configCrypter.DecryptDES(content);
             var childrenList = JToken.Parse(content).Children();
             var parameters = new ConcurrentDictionary<string, IParameter>();
             foreach (var child in childrenList)
@@ -35,7 +37,7 @@ namespace WingServerCommon.Config.Parameters
         private static void ParseTokenSetions(JToken children, ref ConcurrentDictionary<string, IParameter> dic)
         {
             var item = (JProperty)children;
-            ParseToken(item.Name, item.Value.Children(), ref dic);            
+            ParseToken(item.Name, item.Value.Children(), ref dic);
         }
 
         private static void ParseToken(string sectionName, JEnumerable<JToken> childrenList, ref ConcurrentDictionary<string, IParameter> parameters)
@@ -52,7 +54,7 @@ namespace WingServerCommon.Config.Parameters
                 if (item.Value is JObject jObject)
                 {
                     if (IsRangeParameter(jObject))
-                    {                        
+                    {
                         var parameter = ParseRangeParameter(jObject, item.Name);
                         parameter.Section = sectionName;
                         var rangeKey = parameter.Section + "_" + parameter.Name;
@@ -61,7 +63,7 @@ namespace WingServerCommon.Config.Parameters
                     }
 
                     if (IsEnumParameter(jObject))
-                    {                        
+                    {
                         var parameter = ParseEnumParameter(item.Name, jObject);
                         parameter.Section = sectionName;
                         var enumKey = parameter.Section + "_" + parameter.Name;
@@ -94,18 +96,18 @@ namespace WingServerCommon.Config.Parameters
 
         private static IParameter ParseEnumParameter(string name, JObject jObject)
         {
-             var defaultValue = jObject["DefaultValue"]?.Value<JValue>();
-                switch (defaultValue?.Type)
-                {
-                    case JTokenType.String:
-                        return new EnumStringParameter
-                        {
-                            Name = name,
-                            Source = jObject["Source"].Values<string>().ToList(),
-                            Value = defaultValue.Value<string>()
-                        };
-                //TODO other types
-                }
+            var defaultValue = jObject["DefaultValue"]?.Value<JValue>();
+            switch (defaultValue?.Type)
+            {
+                case JTokenType.String:
+                    return new EnumStringParameter
+                    {
+                        Name = name,
+                        Source = jObject["Source"].Values<string>().ToList(),
+                        Value = defaultValue.Value<string>()
+                    };
+                    //TODO other types
+            }
 
             throw new ArgumentException($"Invalid enum parameter {name}.");
         }
@@ -128,7 +130,7 @@ namespace WingServerCommon.Config.Parameters
                                 Value = defaultValue,
                                 MaxValue = maxValue,
                                 MinValue = minValue
-                            };                            
+                            };
                         }
                         else
                         {
@@ -141,14 +143,14 @@ namespace WingServerCommon.Config.Parameters
                                 Value = defaultValue,
                                 MaxValue = maxValue,
                                 MinValue = minValue
-                            };                            
+                            };
                         }
                         break;
                     }
             }
 
             throw new ArgumentException($"Invalid range parameter with name {key}.");
-        }             
+        }
 
         private static IParameter ParseBasicParameter(JValue jValue, string key)
         {

+ 25 - 24
Config/ParameterSerializer.cs

@@ -14,7 +14,8 @@ namespace WingServerCommon.Config.Parameters
         public static IEnumerable<IParameter> Deserialize(string filePath)
         {
             var content = File.ReadAllText(filePath);
-            //TODO Decrypt text
+            var configCrypter = new ConfigCrypter();
+            content = configCrypter.DecryptDES(content);
             var childrenList = JToken.Parse(content).Children();
             var parameters = new List<IParameter>();
             foreach (var child in childrenList)
@@ -28,7 +29,7 @@ namespace WingServerCommon.Config.Parameters
         private static IEnumerable<IParameter> ParseTokenSetions(JToken children)
         {
             var item = (JProperty)children;
-            var parsedParameters = ParseToken(item.Name, item.Value.Children()).ToList();            
+            var parsedParameters = ParseToken(item.Name, item.Value.Children()).ToList();
             return parsedParameters;
         }
 
@@ -47,18 +48,18 @@ namespace WingServerCommon.Config.Parameters
                 if (item.Value is JObject jObject)
                 {
                     if (IsRangeParameter(jObject))
-                    {                        
-                         var parameter = ParseRangeParameter(jObject, item.Name);
+                    {
+                        var parameter = ParseRangeParameter(jObject, item.Name);
                         parameter.Section = sectionName;
-                    parameters.Add(parameter);
+                        parameters.Add(parameter);
                         continue;
                     }
 
                     if (IsEnumParameter(jObject))
-                    {                        
-                            var parameter = ParseEnumParameter(item.Name, jObject);
-                             parameter.Section = sectionName;
-                    parameters.Add(parameter);
+                    {
+                        var parameter = ParseEnumParameter(item.Name, jObject);
+                        parameter.Section = sectionName;
+                        parameters.Add(parameter);
                         continue;
                     }
 
@@ -88,18 +89,18 @@ namespace WingServerCommon.Config.Parameters
 
         private static IParameter ParseEnumParameter(string name, JObject jObject)
         {
-             var defaultValue = jObject["DefaultValue"]?.Value<JValue>();
-                switch (defaultValue?.Type)
-                {
-                    case JTokenType.String:
-                        return new EnumStringParameter
-                        {
-                            Name = name,
-                            Source = jObject["Source"].Values<string>().ToList(),
-                            Value = defaultValue.Value<string>()
-                        };
-                //TODO other types
-                }
+            var defaultValue = jObject["DefaultValue"]?.Value<JValue>();
+            switch (defaultValue?.Type)
+            {
+                case JTokenType.String:
+                    return new EnumStringParameter
+                    {
+                        Name = name,
+                        Source = jObject["Source"].Values<string>().ToList(),
+                        Value = defaultValue.Value<string>()
+                    };
+                    //TODO other types
+            }
 
             throw new ArgumentException($"Invalid enum parameter {name}.");
         }
@@ -122,7 +123,7 @@ namespace WingServerCommon.Config.Parameters
                                 Value = defaultValue,
                                 MaxValue = maxValue,
                                 MinValue = minValue
-                            };                            
+                            };
                         }
                         else
                         {
@@ -135,14 +136,14 @@ namespace WingServerCommon.Config.Parameters
                                 Value = defaultValue,
                                 MaxValue = maxValue,
                                 MinValue = minValue
-                            };                            
+                            };
                         }
                         break;
                     }
             }
 
             throw new ArgumentException($"Invalid range parameter with name {key}.");
-        }             
+        }
 
         private static IParameter ParseBasicParameter(JValue jValue, string key)
         {