首页 新闻 会员 周边

加密问题,很奇怪!

0
悬赏园豆:100 [已解决问题] 解决于 2009-04-01 19:54
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 });
}

传入同样的参数,但是程序每次重新启动后,调用该函数,得到的结果却不同。
各位帮我看看,代码拷入试试

快可天地的主页 快可天地 | 初学一级 | 园豆:5
提问于:2009-03-28 22:05
< >
分享
最佳答案
0

为了使这些功能跨 Web 服务器网络(网络场)工作,必须用有效键值显式并一致地配置 <MachineKey> 属性。"AutoGenerate" 值对网络场不起作用,因为它依赖于密码随机密钥,随机密钥使用计算机本地保护来保持,并且在多台计算机之间不一致。

也就是说 不能在 web.config 中<MachineKey> 这一节指定成下面这样

validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
必须要指定一个手动分配的密钥,
具体如何指定参见下面链接

http://msdn.microsoft.com/zh-cn/library/w8h3skw9.aspx

eaglet | 专家六级 |园豆:17139 | 2009-03-29 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册