Code
using System.Web.Configuration;
using System.Reflection;
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(EncodePassword("1", "Ehk/gwOk7mpqna7M/8hc5g=="));
}
public string EncodePassword(string pass, string salt)
{
byte[] bIn = Encoding.Unicode.GetBytes(pass);
byte[] bSalt = Convert.FromBase64String(salt);
byte[] bAll = new byte[bSalt.Length + bIn.Length];
byte[] bRet = null;
Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
bRet = EncryptPassword(bAll);
return Convert.ToBase64String(bRet);
}
public virtual byte[] EncryptPassword(byte[] password)
{
Type machineKeySection = typeof(MachineKeySection);
Type[] paramTypes = new Type[] { typeof(bool), typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) };
MethodInfo encryptOrDecryptData = machineKeySection.GetMethod("EncryptOrDecryptData", BindingFlags.Static | BindingFlags.NonPublic, null, paramTypes, null);
return (byte[])encryptOrDecryptData.Invoke(null, new object[] { true, password, null, 0, password.Length });
}
传入同样的参数,但是程序每次重新启动后,调用该函数,得到的结果却不同。
各位帮我看看,代码拷入试试
为了使这些功能跨 Web 服务器网络(网络场)工作,必须用有效键值显式并一致地配置 <MachineKey> 属性。"AutoGenerate" 值对网络场不起作用,因为它依赖于密码随机密钥,随机密钥使用计算机本地保护来保持,并且在多台计算机之间不一致。
也就是说 不能在 web.config 中<MachineKey> 这一节指定成下面这样
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
必须要指定一个手动分配的密钥,
具体如何指定参见下面链接
http://msdn.microsoft.com/zh-cn/library/w8h3skw9.aspx