增加对象加密和解密方法。
This commit is contained in:
		
							parent
							
								
									a3bd83ff03
								
							
						
					
					
						commit
						37a6942020
					
				@ -48,9 +48,10 @@ namespace Falcon.SugarApi.Test.Encryption
 | 
			
		||||
            IAESEncryption r = new AESProvider(config);
 | 
			
		||||
            var k = r.GenerateKey();
 | 
			
		||||
 | 
			
		||||
            //测试字符串加密
 | 
			
		||||
            for (int i = 0; i < 1000; i++) {
 | 
			
		||||
                var mingw = GenerateStr();
 | 
			
		||||
                Console.WriteLine(mingw);
 | 
			
		||||
                //Console.WriteLine(mingw);
 | 
			
		||||
                var p = new AESProvider(config);
 | 
			
		||||
                var miwen = p.Encrypt(k, mingw);
 | 
			
		||||
 | 
			
		||||
@ -60,6 +61,18 @@ namespace Falcon.SugarApi.Test.Encryption
 | 
			
		||||
                Assert.AreEqual(mingw, mingw1, "解密后明文不同");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            //测试对象加密
 | 
			
		||||
            var obj = new TestObj { Id = 1, Name = "abc" };
 | 
			
		||||
            var ma = r.Encrypt(k, obj);
 | 
			
		||||
            Assert.IsNotNull(ma);
 | 
			
		||||
            var obj2 = r.Decrypt<TestObj>(k, ma);
 | 
			
		||||
            Assert.IsNotNull(obj2);
 | 
			
		||||
            Assert.IsTrue(obj.Id == obj2.Id);
 | 
			
		||||
            Assert.IsTrue(obj.Name == obj2.Name);
 | 
			
		||||
            Assert.ThrowsException<ArgumentNullException>(() => r.Encrypt<TestObj>(k, null));
 | 
			
		||||
            Assert.ThrowsException<ArgumentNullException>(() => r.Encrypt<TestObj>(null, obj));
 | 
			
		||||
            Assert.ThrowsException<ArgumentNullException>(() => r.Decrypt<TestObj>(k, null));
 | 
			
		||||
            Assert.ThrowsException<ArgumentNullException>(() => r.Decrypt<TestObj>(null, ma));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
@ -76,5 +89,11 @@ namespace Falcon.SugarApi.Test.Encryption
 | 
			
		||||
            }
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        class TestObj
 | 
			
		||||
        {
 | 
			
		||||
            public int Id { get; set; }
 | 
			
		||||
            public string Name { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										47
									
								
								Falcon.SugarApi/Encryption/IEncryptionExtend.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Falcon.SugarApi/Encryption/IEncryptionExtend.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
			
		||||
using Falcon.SugarApi.JsonSerialize;
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace Falcon.SugarApi.Encryption
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// IEncryption接口扩展
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class IEncryptionExtend
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 对象序列化接口
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static IJsonSerialize JsonSerialize { get; set; } = new JsonSerializeFactory().CreateJsonSerialize();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 加密对象
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">对象类型</typeparam>
 | 
			
		||||
        /// <param name="encryption">加密接口</param>
 | 
			
		||||
        /// <param name="obj">要加密的对象</param>
 | 
			
		||||
        /// <param name="key">加密用的key</param>
 | 
			
		||||
        /// <returns>加密后结果</returns>
 | 
			
		||||
        /// <exception cref="ArgumentNullException">参数为null</exception>
 | 
			
		||||
        public static string Encrypt<T>(this IEncryption encryption, string key, T obj) {
 | 
			
		||||
            obj.ThrowNullExceptionWhenNull();
 | 
			
		||||
            key.ThrowNullExceptionWhenNull();
 | 
			
		||||
            return encryption.Encrypt(key, JsonSerialize.Serialize(obj));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 解密对象
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">对象类型</typeparam>
 | 
			
		||||
        /// <param name="encryption">加密接口</param>
 | 
			
		||||
        /// <param name="key">加密用的key</param>
 | 
			
		||||
        /// <param name="strObj">对象密文</param>
 | 
			
		||||
        /// <returns>解密后的对象</returns>
 | 
			
		||||
        /// <exception cref="ArgumentNullException">参数为null</exception>
 | 
			
		||||
        public static T? Decrypt<T>(this IEncryption encryption, string key, string strObj)
 | 
			
		||||
            where T : class {
 | 
			
		||||
            key.ThrowNullExceptionWhenNull();
 | 
			
		||||
            strObj.ThrowNullExceptionWhenNull();
 | 
			
		||||
            return JsonSerialize.Deserialize<T>(encryption.Decrypt(key, strObj));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user