我试图生成6个字符或更少的随机base32数字.这应该给出大约10亿种不同的组合.
我创建了一个程序来生成这些"随机"数字.但是,它似乎每40,000代平均产生一次重复.
当有超过十亿种不同的组合时,为什么这些"随机"数字经常重复?
这是我的代码:
static void Main(string[] args)
{
int seed = Environment.TickCount;
Random r = new Random(seed);
Dictionary<int, int> resultDictionary = new Dictionary<int, int>();
for (int x = 1; x <= 1000; x++)
{
Dictionary<string, int> dictionary = new Dictionary<string, int>();
try
{
while (true)
{
int rand = r.Next(0, 1073741823);
CrockfordBase32Encoding encoding = new CrockfordBase32Encoding();
string encodedRand = encoding.Encode((ulong)rand, false);
dictionary.Add(encodedRand, rand);
}
}
catch (Exception)
{
}
Console.WriteLine(string.Format("{0} - {1}", x, dictionary.Count));
resultDictionary.Add(x, dictionary.Count);
x++;
}
Console.WriteLine(); …Run Code Online (Sandbox Code Playgroud) 问题的标题说明了一切.我一直在研究SHA-1和大多数地方,我看到它是40个十六进制字符长,对我来说是640bit.它只能用10个十六进制字符160bit = 20byte来表示.一个十六进制字符可以表示2个字节对吗?为什么它需要的时间是它的两倍?我的理解中缺少什么.
如果使用Base32或Base36,SHA-1甚至不能只有5个或更少的字符?
我有一个base32字符串,我需要将其转换为字节数组.我在.NET框架中找到转换方法时遇到了麻烦.我可以找到base64的方法,但不能找到base32的方法.
Convert.FromBase64String - 像base32这样的东西是完美的.
在框架中是否有这样的方法或者我必须自己滚动?
对于小字符串(20-500个字符),我需要快速校验和(尽可能快).
我需要源代码,而且必须很小!(最多约100 LOC)
如果它可以在Base32/64中生成字符串.(或类似的东西)它会是完美的.基本上校验和不能使用任何"坏"字符..你知道..通常(){} [].,;:/ + - \| 等等
澄清
它可能是强弱的,这无关紧要,因为它仅用于幕后目的.
它不需要包含原始字符串的所有数据,因为我只会与生成的校验和进行比较,我不期望任何类型的"解密".
就像标题所说,我正在尝试将字符串"test"编码为Java中的base32字符串"ORSXG5A =".
我在网上搜索时发现的是从32位到字符串编码的类,但显然这不是我想要的.
对不起这个新手问题.
有关如何实现base32编码或base32编码规范的足够信息,但我不明白它是什么,我们为什么需要它以及主要应用程序在哪里.有人可以解释并提供有关使用情况的真实生活场景吗?谢谢.
我正在寻找在Java中实现Crockford的Base32编码/解码.具体来说,这意味着我可以在我的项目中使用Java库.或者,一些代码示例进行编码和解码.
我想加密许可系统的一些信息,我希望结果能够由用户输入.
更新:此操作必须是可逆的(可解密的)例如,加密(ComputerID + ProductID) - >(任何可以键入的标准ASCII字符.理想情况下甚至可能只是AZ).
到目前为止,我所做的是将加密文本转换为HEX(因此它是0-F中的任何字符),但这会使字符数翻倍.
我正在使用VB6.
我想我会对每对(Input $(x)和Key $(x))进行一些操作,然后做一个MOD以使其保持在ascii值的范围内(可能是0-9-AZ)
有什么好的算法建议吗?