1 重构Services.Customers.CustomerServiceDefaults
#region 用户密码加密相关配置设定
///
/// 【哈希密钥长度】
///
/// 摘要:
/// 设定哈希(Hash)加密方式所需密钥字符串长度的整型值。
/// 说明:
/// 当使用哈希方式对用户的密进行加密操作进行加密操作时,设定密钥字符串的长度值为:5个字符。
///
///
public static int PasswordSaltKeySize => 5;
///
/// 【哈希加密默认编码格式】
///
/// 摘要:
/// 设定哈希加密算法名称的字符串常量(默认:以最高安全性及其最大长度的"SHA512"加密算法,对用户的密码进行加密操作。)。
///
///
public static string DefaultHashedPasswordFormat => "SHA512";
#endregion
2 Services.Security.IEncryptionService
namespace Services.Security
{
///
/// 【加密服务--接口】
///
/// 摘要:
/// 继承于该接口的具体实现类中的方法成员实现了哈希加密操作方式,为用户输入的密码进行加密提供相应的方法支撑。
///
///
public interface IEncryptionService
{
/// name="size">一个指定字节数组实例长度的整型值。
///
/// 【生成密钥】
///
/// 摘要:
/// 生成哈希(Hash)加密方式所需的密钥字符串(默认:5个字符的字符串),为哈希加/解密操作提供数据支撑。
///
/// 返回:
/// 哈希(Hash)加密方式所需的密钥字符串(默认:5个字符的字符串)。
///
///
///
string CreateSaltKey(int size);
/// name="password">一个指定的需要被加密码(明码)字符串。
/// name="saltKey">一只用于哈希加密方式的密钥字符串。
/// name="passwordFormat">1个指定的哈希加密算法的名称(SHA-224、SHA-256、SHA-384,和 SHA-512等)。
///
/// 【哈希方式生成密码】
///
/// 摘要:
/// 通对哈希加密算法方式对指定的密码字符进行加密操作,最后返回一个加密后的密码字符串(该加密字符串定长,长度由算法名称决定)。
///
///
/// 返回:
/// 一个经过哈希加密算法加密后的密码字符串(该加密字符串定长,长度由算法名称决定)。
///
///
string CreatePasswordHash(string password, string saltKey, string passwordFormat);
}
}
3 Services.Security.EncryptionService
using System.Security.Cryptography;
using System.Text;
using Core;
namespace Services.Security
{
///
/// 【加密服务--类】
///
/// 摘要:
/// 该类中的方法成员实现了哈希加密操作方式,为用户输入的密码进行加密提供相应的方法支撑。
///
///
public class EncryptionService : IEncryptionService
{
/// name="size">一个指定字节数组实例长度的整型值。
///
/// 【生成密钥】
///
/// 摘要:
/// 生成哈希(Hash)加密方式所需的密钥字符串(默认:5个字符的字符串),为哈希加/解密操作提供数据支撑。
///
/// 返回:
/// 哈希(Hash)加密方式所需的密钥字符串(默认:5个字符的字符串)。
///
///
///
public virtual string CreateSaltKey(int size)
{
//获取高质量的随机数。
using var provider = RandomNumberGenerator.Create();
var buff = new byte[size];
provider.GetBytes(buff);
//把存储字节数组实例中的密钥,转换为字符串形式的密钥。
return Convert.ToBase64String(buff);
}
/// name="password">一个指定的需要被加密码(明码)字符串。
/// name="saltKey">一只用于哈希加密方式的密钥字符串。
/// name="passwordFormat">1个指定的哈希加密算法的名称(SHA-224、SHA-256、SHA-384,和 SHA-512等)。
///
/// 【哈希方式生成密码】
///
/// 摘要:
/// 通对哈希加密算法方式对指定的密码字符进行加密操作,最后返回一个加密后的密码字符串(该加密字符串定长,长度由算法名称决定)。
///
///
/// 返回:
/// 一个经过哈希加密算法加密后的密码字符串(该加密字符串定长,长度由算法名称决定)。
///
///
public virtual string CreatePasswordHash(string password, string saltkey, string passwordFormat)
{
return HashHelper.CreateHash(Encoding.UTF8.GetBytes(string.Concat(password, saltkey)), passwordFormat);
}
}
}
4 重构Services.Installation.InstallationService.InstallCustomersAndUsersAsync
var saltKey = _encryptionService.CreateSaltKey(CustomerServicesDefaults.PasswordSaltKeySize);
var customerList = new List<Customer>
{
new Customer
{
Username = "Test",
Email = "[email protected]",
Avatar="/images/Avatar/子鼠fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_1",
Email = "[email protected]",
Avatar="/images/Avatar/丑牛fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_2",
Email = "[email protected]",
Avatar="/images/Avatar/寅虎fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_3",
Email = "[email protected]",
Avatar="/images/Avatar/卯兔fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_4",
Email = "[email protected]",
Avatar="/images/Avatar/辰龙fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_5",
Email = "[email protected]",
Avatar="/images/Avatar/巳蛇fufu.png",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
new Customer
{
Username = "Test_6",
Email = "[email protected]",
Avatar="/images/Avatar/1.jpg",
PasswordSalt=saltKey,
Password = _encryptionService.CreatePasswordHash("1", saltKey,CustomerServicesDefaults.DefaultHashedPasswordFormat),
IsSystemAccount= true,
Active = true,
Deleted = false,
CreatedDate = DateTime.Now,
},
};
对以上功能更为具体实现和注释见230602_022ShopRazor(用户密码哈希加密操服务的定义实现)。