我正在为一个我正在整理的简单网站开发快速验证码生成器,我希望在页面的URL中传递加密密钥.我可能很容易做到这一点作为一个查询字符串参数,但我希望不是这样(只是因为没有其他任何东西跑掉查询字符串)...
我的加密代码生成一个byte [],然后使用Convert.ToBase64String(byte [])将其转换为字符串.但是,这个字符串仍然不是友好的url,因为它可以包含'/'和'='之类的东西.有没有人知道.NET框架中更好的函数将字节数组转换为url友好字符串?
我知道所有关于System.Web.HttpUtility.UrlEncode()及其等价物,但是,它们只适用于查询字符串参数.如果我在路径内部对"="进行url编码,我的Web服务器会返回400 Bad Request错误.
无论如何,不是一个关键问题,但希望有人能给我一个很好的解决方案
**编辑:只是为了绝对确定我正在用字符串做什么,我想我会提供更多信息.
由我的加密算法产生的byte []应该通过某种算法提供,以使其成为url友好字符串.在此之后,它将成为XElement的内容,然后将其用作XSLT转换的源文档,并用作锚点的href属性的一部分.我不相信xslt转换导致问题,因为路径上出现的内容似乎是编码的查询字符串参数,但会导致HTTP 400
我也在base64字符串上尝试过HttpUtility.UrlPathEncode(),但这似乎也没有做到(我仍然在我的网址中以'/'结尾)**
我需要一些关于如何将int加密到另一个int的指针或实际示例,并且需要密钥来解密该值.
就像是:
encrypt(1, "secret key") == 67123571122
decrypt(67123571122, "secret key") == 1
Run Code Online (Sandbox Code Playgroud)
这个人提出了几乎相同的问题:整数的对称双射算法
然而我是一个总加密"n00b"我想要一些更实际的例子,如果可能的话,在python中.
我知道我需要使用某种块密码,但我很遗憾的是保持加密结果仍然是数字而且有些短(可能是长而不是int)
有什么指针吗?谢谢
更新
- 我为什么要这样做?
我有一个Web服务,每个"对象"都有一个URL,例如:
example.com/thing/123456/
现在,这些ID是顺序的.我想隐藏它们是顺序的(数据库ID)这一事实.
这些页面上的东西不是"绝密"或类似的东西,但对于某人来说,窥探其他随机的对象并不像在URL中增加该ID那样容易.
因此,对于某种双向数字加密,URL ID根本不是连续的,并且需要花费相当多的时间才能找到更多这些对象.(此外,请求受到限制)
我想保留这个数字而不是任意字符串的唯一原因是这个更改是一个完全替换,并且事情只会在没有任何其他代码更改的情况下工作.
此外,我不能只生成新的随机数据库ID.我必须在应用程序中处理此加密/解密.
我有模特课:
public class Person {
public int Id { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
并且要查看有关某人的详细信息,用户可以猜出其ID
http://localhost:17697/Person/Details/2
Run Code Online (Sandbox Code Playgroud)
它们只是连续的整数.
如何告诉实体框架将这些ID改组以使其难以猜测?
c# ×3
cryptography ×2
encryption ×2
.net ×1
asp.net-mvc ×1
base64 ×1
friendly-url ×1
mono ×1
obfuscation ×1
python ×1
security ×1