[已关闭问题] membership中Hashed加密问题
提问时间: 2007-11-30 15:45
悬赏分:100 提问时间2007/11/30 15:45:00 问题为何被关闭 浏览:580 次
参照msdn中membership
在 webconfig中 我配置了
<machineKey
  validationKey="AutoGenerate"
  decryptionKey="AutoGenerate,IsolateApps"   
  validation="SHA1"
   decryption="Auto"
      />

  System.Security.Cryptography.HMACSHA1 hash = new System.Security.Cryptography.HMACSHA1();
                hash.Key = HexToByte(machineKey.ValidationKey);
 hash.Key = HexToByte(machineKey.ValidationKey);
在这调用HexToByte方法

private byte[] HexToByte(string hexString)
//这里hexString应该是AutoGenerate
{
       byte[] returnBytes = new byte[hexString.Length / 2];
        for (int i = 0; i < returnBytes.Length; i++)
         returnBytes[i] =Convert.ToByte(hexString.Substring(i * 2, 2), 16);
        return returnBytes;
    }
这里提示不符合要求的 字符,我也查看了ToByte方法,如果字符中大于16进制的f的 时候他就报这个错误(不符合要求的字符)
但是在webconfig中 <machineKey   validationKey="AutoGenerate"
validationKey必须是AutoGenerate,

我想既然是msdn中的例子,应该是测试过的,那为什么会出现这样的情况
请 大侠指教

提问者:mythzz - 初学一级

问题补充:validationKey="AutoGenerate"
我也改成别的过,但是系统提示要AutoGenerate,里面的gto等字符已经不允许了




2楼的思路也是我开始这样想的,可是你可以看下msdn中的membership的例子,他用的access,就是测试了不成功还提示那样的错误,就搞定我郁闷。呵呵,加密要耗资源,当然在正式的项目中不可能这么做,现在就自己测试的问题!

(2)
validationKey必须是hex的,难道自动生成的不是hex吗?
7个月前   回答者:Jeffrey Zhao - 小虾三级
随机密钥怎么可能通过machineKey.ValidationKey的方式获取??

你的代码中的“Convert.ToByte(hexString.Substring(i * 2, 2), 16);
”如果真的是MSDN的,要么就是你理解错了,要么就是例子错了

因为machineKey.ValidationKey仅仅是获取webconfig中的一个字符串,仅仅如此,不然何苦要辗转一大圈的去webconfig中才能拿到machinekey?如果次次加密都这样的话,性能会慢到吐血~~~

对于随机密钥,只能通过反射的方式直接从machinekeysection的一个静态字段(MS还有一个非静态的属性也行)

当然,如果你能找到办法从LSA中获取随机密钥,应该也可以。(不过,俺没那本事^_^)
7个月前   回答者:坚持信念 - 小虾三级
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除