我需要一种能够将32位有符号整数与另一个32位有符号整数进行一对一映射(即无冲突)的算法.
我真正关心的是足够的熵,因此函数的输出似乎是随机的.基本上我正在寻找类似于XOR Cipher的密码,但它可以生成更多任意外观的输出.虽然默默无闻,但安全并不是我真正关心的问题.
编辑以便澄清:
预期结果示例:
F(100)= 98456
F(101)= -758F
(102)= 10875498
F(103)= 986541
F(104)= 945451245
F(105)= -488554
就像MD5一样,改变一件事可能会改变很多事情.
我正在寻找一个数学函数,所以手动映射整数不是我的解决方案.对于那些提出要求的人来说,算法速度并不是很重要.
我正在使用一个API,它希望我为使用API的事务生成不透明的"引用ID",换句话说,用户无法以任何方式猜测或推断的唯一引用.(是'推断'适当的英语?)
这就是我目前一起入侵的内容:
randomRef = randint(0, 99999999999999)
while Transaction.objects.filter(transactionRef = randomRef).count():
randomRef = randint(0, 99999999999999)
Transaction.objects.create(user=user, transactionRef=randomRef, price=999)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的数据库目前似乎缺少交易.我已经意识到我的方法并不特别是线程安全(假设我在多个mod_wsgi apache线程上运行相同的django代码,它们都可以生成相同的randomRef!)
有没有人有更好的技巧为我生成随机主键?
我想在ASP.NET中混淆一个查询字符串参数.该站点将有大量请求,因此算法不应该太慢.
我的问题是我找到的所有算法都会产生不需要的字符(比如+/=)
这是我想要实现的一个例子:
www.domain.com/?id=1844
Run Code Online (Sandbox Code Playgroud)
至
www.domain.com/?id=3GQ5DTL3oVd91WsGj74gcQ
Run Code Online (Sandbox Code Playgroud)
混淆的参数应该只包括az和AZ以及0-9个字符.
我知道我可以使用base64进行加密,但这会生成不需要的字符,例如/or =或+.
知道可以使用什么算法吗?
更新: 我知道UrlEncoding,我想避免编码字符串.因为这会在网址中生成%F2或%B2等字符.
我想生成一个链接
http://site/?code=xxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
从xxxxxxxxxx字符串生成的加密字符串在哪里user01.我需要稍后将其转换回来.
有没有一种简单的方法来加密和解密这样的字符串?
asp.net ×2
c# ×2
encryption ×2
.net ×1
algorithm ×1
bijection ×1
block-cipher ×1
cryptography ×1
django ×1
primary-key ×1
python ×1
random ×1
security ×1