- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个可以生成“字母数字哈希”的函数。给定一个源字符串,它会生成一个确定的结果字符串,其中可以包含任何字母 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/
我想在 javascript 中使用正则表达式进行名称检查。 该值可以包含字母数字和后面的特殊字符(“-”、“.”、“_”和“@”)。 应始终以字母数字字符开头。 不能为空字符串。 此参数允许的最大长
在尝试验证字符串是否仅由字母字符组成时,我想到了两种可能的正则表达式解决方案。 第一个检查字符串中的每个字符是否都是字母数字: /^[a-z]+$/ 第二个尝试在字符串中的某处找到一个字符 不是 字母
我想从此字符串以及类似的其他类型的字符串中删除所有非字母数字字符 Unable_to_locate_element_{"method""link_text","selector""ikljbhfvde
如何在 Python 中编写一个函数来确定文件名列表是否与给定模式匹配以及该模式中缺少哪些文件?例如: 输入-> KUMAR.3.txt KUMAR.4.txt KUMAR.6.txt KUMAR.7
每次从字母数字更改为数字后,您能帮我拆分一个字符串吗(或者如果可能的话,最好在每个“拆分”场合放置一个空格),反之亦然? 所以像 D2c1 22 这样的字符串应该看起来像 D 2 c 1 22。最好的
我正在尝试找到合适的输入法来让 Android 应用程序打开键盘,数字在顶部,字母在底部。我们输入的注册号通常以数字值开头,但随后是字母部分,因此如果能先打开数字就更好了。 我试过 android:i
我想编写一个正则表达式来匹配具有以下约束的字母数字字符串: 至少包含一个字符 (a-zA-Z) 不包含一年中月份的名称 接受任何符号或字符 长度在:8 到 90 之间 有效字符串:“ABG-1234”
我需要对字母数字列表进行排序。我可以排序,但有些排序方式,因为它是 alphaNumeric,所以我无法将 abc1 放在 abc10 之前。 我的 HTML 代码: abc11:Hello
我试图让这个排序算法与 IQueryable.OrderBy() 一起工作: https://www.dotnetperls.com/alphanumeric-sorting 我实现了 Alphanu
我正在寻找对由数字和文本以及它们的组合组成的数组进行排序的最简单方法。 例如 '123asd' '19asd' '12345asd' 'asd123' 'asd12' 变成 '19asd' '123a
尝试过 [a-zA-Z0-9-_] [a-zA-Z0-0\-\_] [[[:alnum:]]-_] ... 用正则表达式表示的正确方法是什么? 似乎 [a-zA-Z0-9-] 适用于字母数字或破折号。
我有一个大约 30 张的工作簿,我试图按字母数字顺序排列。例如:“纽约 9 号、纽约 10 号、纽约 11 号” 我的代码无法在一位数之后订购两位数。 “10、11、9” 有没有人熟悉计算这个的方法?
我有一个 Excel 表,其中的数据看起来像这样。 Data x=1.1 x=11.2 x=10.3 x=1.4 x=2.5;2.6 x=2.1 x=4.7 x=6.8 x=6.2;6.3 x=1.1
我一直在研究具有多个意图的 AWS Lex 机器人。目前我遇到一个问题,插槽类型为 AMAZON.AlphaNumberic 的插槽只接受数字。 当我输入诸如“测试”之类的词时,它不会继续进入下一个槽
def fun(s): for i in s: if i.isalnum(): print("True") if i.isalpha()
文本框可以包含格式的值 DL-06-T-7405(前两个字母,然后两个数字,然后字母,接下来四个是数字)或者DL-06-TT-7405(前两个字母,然后两个数字,然后两个字母,接下来四个是数字)或者D
我正在使用 jQuery 的 .alphanumeric 插件,当用户直接在文本框中键入内容时,它肯定会实现我所期望的功能。但是,如果用户将值复制并粘贴到文本框中,则一切都将失败。 $("#").al
我有这个: 非连续重复字符工作正常,但我无法将其严格设置为字母数字并允许使用一些特殊字符(!$(),-。:;?@ {} [] ^_“)。特殊字符不是必填,但如果由用户输入则可以。 总结: 1.必须介
这个问题在这里已经有了答案: PHP using preg_replace : "Delimiter must not be alphanumeric or backslash" error (5
我刚开始使用 cakePHP,我遇到了这个问题 警告 (2):preg_match() [function.preg-match]:定界符不能是字母数字或反斜杠 [CORE/cake/libs/mod
我是一名优秀的程序员,十分优秀!