2012-04-22 67 views
1

目前我正在创建一个在线考试,并且需要通过URL将一小部分信息从一页传递到另一页。加密URL信息

目前,我目前有这样的:

Response.Redirect("Home.aspx?uName=" + txtUserName.Text); 

都到主页与它的使用者名称,然后拿起和信息被加载。但是我想要做的是如何加密UserName,以便用户无法玩弄它,也不能猜测它是什么。有没有办法做到这一点?

+0

为什么你不加密它,然后解密它?这可能对你有所帮助:http://www.obviex.com/samples/hash.aspx – 2012-04-22 10:26:40

+4

哦,上帝。我会开始看会议和饼干队友。 – Spence 2012-04-22 10:27:01

+0

看到我要使用会话,但我注意到当我去网站和登录等信息被加密,所以我认为这是做到这一点的正确方法 – 2012-04-22 10:28:43

回答

3

不要使用它。

改为使用Session

如果你确实需要通过URL加密(密码加密)数据并使用Base64(编码转换为可重复字符)进行编码(不要忘记加密'+'符号,因为Base64的确使用它,但浏览器认为它的一个空间......)

+1

Base64是可逆的,不会增加任何安全性! – SimSimY 2012-04-22 10:42:49

+0

@TheSimon我没说Base64增加了安全性!我说这是一种可以通过URL发送的格式! '加密数据和(!!)使用Base64编码' – 2012-04-22 10:43:40

+0

是的,但TheSimon评论是有用的。它总是很好的指出,Base64是编码,而不是加密;) – JoeBilly 2012-04-22 11:07:50

2

一个简单的解决办法是采取回答这个问题:Encrypt and decrypt a string,做这样的事情:

Response.Redirect("Home.aspx?uName=" + Server.UrlEncode(Crypto.EncryptStringAES(txtUserName.Text, "YourEncryptionKey")) 

然后你的下一个页面上,只是扭转过程中得到数值退出如下:

var username = Crypto.EncryptStringAES(Request["uName"], "YourEncryptionKey") 

但我会问,为什么你通过一个URL传递用户名?使用会员供应商并简单地让用户登录会不会更好?然后,您可以将任何相关信息存储在与该用户关联的数据库中。

+0

实际上,这个问题的答案造成了很多加密错误,在这种情况下它很容易失败。使用内置的crypt可能是最简单的方法,就是使用带有包含在URL中的IV的随机IV加密的Aes加密,然后使用加密结果(使用第二个密钥)的HMAC来计算认证标签(也通过url传递),除非hmac验证,否则甚至不会尝试解密。更好的方法是使用[bouncy castle](http://www.bouncycastle.org/csharp/)的随机IV的AES-GCM。 – jbtule 2012-04-24 21:21:05

+0

我已经为这个问题的答案添加了两种方法的实际代码示例http://stackoverflow.com/a/10366194/637783 – jbtule 2012-04-29 16:11:58