OTP(One-Time-Pad,一次一密),是惟一在数学上被证明是不可破译的密码。OTP一般只用于秘密极端重要的情况:军事、外交等。但是,由于密钥长度很长以及安全地存储和交换密钥非常困难,OTP不适用于许多场合,所以实际应用中并不用OTP加密,而是用对称加密。
下面给出一个OTP 加密的例子:
public
static
string
GenerateSalt(
int
size)//创建 salt 值
{
//创建强随机数
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
byte [] buff = new byte [size];
crypto.GetBytes(buff);
return Convert.ToBase64String(buff);
}
public static string GeneratePwdHash( string pwd, string salt)//加密
{
string saltpwd = string .Concat(pwd, salt);//用明文与 salt 值组合
string password = FormsAuthentication.HashPasswordForStoringInConfigFile(saltpwd, " SHA1 " );
return password;
}
类
RNGCryptoServiceProvider 继承于
CryptoServiceProvider(CSP),用来产生一个强随机数,与 VB 6.0 的 Radom 函数有相同的功能,只是 .NET 的 PRNG(伪随机数发生器) 产生的随机数品质要好得多{
//创建强随机数
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
byte [] buff = new byte [size];
crypto.GetBytes(buff);
return Convert.ToBase64String(buff);
}
public static string GeneratePwdHash( string pwd, string salt)//加密
{
string saltpwd = string .Concat(pwd, salt);//用明文与 salt 值组合
string password = FormsAuthentication.HashPasswordForStoringInConfigFile(saltpwd, " SHA1 " );
return password;
}