gpt4 book ai didi

language-agnostic - "Alphanumeric"哈希 - A-Z, 0-9

转载 作者:行者123 更新时间:2023-12-03 22:30:16 25 4
gpt4 key购买 nike

我正在寻找一个可以生成“字母数字哈希”的函数。给定一个源字符串,它会生成一个确定的结果字符串,其中可以包含任何字母 a-z 或数字 0-9,并且不能通过逆向工程来生成源。这将用于为基于 secret 数据的系统生成密码,因此 8 到 12 个字符之间的字符串是理想的,安全散列也是理想的。

我想我可以使用普通的按位散列,将其 XOR 折叠为 64 位(如果我使用,例如,SHA256),然后一次取 5 位的结果(产生一个数字 0-31)并查找要从索引有序集合中使用的字符代码。有 26 个字母和 10 个数字,这意味着我必须省略一些(可能会删除手写时可能被误认为是其他字符的字符)。 64 位,一次 5 位,将产生一个 12 字符的字符串,剩下 4 位。

但是,我担心两件事:首先,通过采用非 2 次幂的位数来引入偏差;其次,如何处理剩余的位。我是按原样使用它们,知道只有 16 种可能性,我是不考虑它们(并丢失可能引入偏见的数据),还是我再合并一点来制作 13 个字符的字符串(最后一位应该放在哪里?来自)?

编辑:这是我目前的尝试;它需要一个可枚举的字节(如大多数哈希算法生成的字节数组)并返回一个字符串:

    /// <summary>
/// Converts an IEnumerable of bytes to a string representation which can have any lowercase letter a-z except for l, o, q and z, and any digit 0-9.
/// Uses 5 bits of the byte array at a time to generate numbers from 0 to 31, which are then translated to letters or numbers.
/// </summary>
/// <param name="toConvert">the byte array to convert.</param>
/// <returns>A string containing the alphanumeric case-insensitive representation of the bytes in the array.</returns>
public static string ToInsensitiveAlphaNumericString(this IEnumerable<byte> toConvert)
{
var chars = new[]
{
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

var enumerator = toConvert.GetEnumerator();
enumerator.MoveNext();

int buffer = enumerator.Current;
short bufferLength = 8;
const int valueLength = 5;

var builder = new StringBuilder();

while (true)
{
var value = buffer >> (bufferLength - valueLength);

builder.Append(chars[value]);

buffer = buffer - (value << (bufferLength - valueLength));
bufferLength -= valueLength;

if(bufferLength < valueLength )
{
if (enumerator.MoveNext())
{
buffer = (buffer << 8) + enumerator.Current;
bufferLength += 8;
}
else
{
//here's the main question; to include, or not to include?
if (bufferLength > 0)
builder.Append(chars[buffer]);
break;
}
}
}

return builder.ToString();
}

最佳答案

如何生成您的 SHA256,然后生成 Base36编码结果?没有剩余的位,没有偏见......

这样您就拥有经过验证的算法的加密强度(记住加盐并使用多次哈希迭代)以及您需要的字母数字表示。

关于language-agnostic - "Alphanumeric"哈希 - A-Z, 0-9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com