“字母数字”哈希 - A-Z、0-9

2023-12-25

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

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

然而,我担心两件事:首先,通过采用非 2 的幂位数来引入偏差;第二,如何处理剩余的部分。我是否按原样使用它们,因为知道只有 16 种可能性,我是否将它们保留(并丢失可能引入偏差的数据),或者我是否再合并一位以构成 13 个字符的字符串(最后一位应该在哪里)来自)?

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

    /// <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 http://en.wikipedia.org/wiki/Base_36对结果进行编码?没有残留,没有​​偏见......

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“字母数字”哈希 - A-Z、0-9 的相关文章

  • 重新加载页面时删除哈希值?

    我使用哈希来切换我的图像滑块 当我重新加载页面并且哈希值设置为 e h 3 没有图片 当图库在几秒钟后自动滑动时 它显示下一个 所以几秒钟内什么也没有 有没有办法在加载页面时检查哈希并将其删除 我只想关心那些用散列为页面添加书签的人 问候
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • 如果计算的哈希码超过整数最大限制,会发生什么?

    这是 Java HashTable 类的 hashCode 实现 如果哈希表中的元素数量很大并且哈希码超过 INTEGER MAX LIMIT 2 147 483 648 到 2 147 483 647 该怎么办 我假设 hashCodes
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • ASP.NET 成员资格 HashAlgorithmType 默认为 HMACSHA256,那么密码是哈希键控的吗?

    我有一个 ASP NET 4 5 Web 应用程序 它使用SqlMembershipProvider 在开发过程中 有人把passwordFormat Clear 在配置中导致密码以明文形式保存 我想删除它并启用密码散列 但我想确保散列不是
  • 直接对文件的哈希值进行数字签名,而不是对文件进行签名

    我的问题是 是否可以直接对文件的哈希值而不是文件进行数字签名 我必须通过电子令牌在 Web 环境中对 xml 文件进行数字签名 所以我必须将文件从服务器下载到客户端 然后从客户端计算机上的电子令牌 USB 获取证书并对文件进行签名并将其上传
  • $scope.$digest 之后立即触发事件

    在我的 AngularJS 应用程序中 有几个点我想等待 scope被处理到 DOM 中 然后在其上运行一些代码 就像 jQueryfadeIn 例如 有没有办法监听某种 digestComplete 消息 我当前的方法是 设置后立即 sc
  • 我使用仅大小写不同于其类型的变量名是不道德的吗?

    例如 采用这段代码 var person new Person 或者对于 Python 爱好者来说 person Person 我经常被告知这有多糟糕 但还没有看到这两行代码不道德的例子 对我来说 人就是一个人 试图给它起另一个名字是浪费时
  • 如何在 XSLT 中应用字母数字排序

    根据以下 XML 在 XSL 中实现字母数字排序的最佳方法是什么 Edit 澄清一下 下面的 XML 只是一个简单的示例 真正的 XML 将包含更多的变体值 使用将标签文本拆分为文本和数字部分substring before and sub
  • 如何测试哈希函数?

    有没有办法测试哈希函数的质量 我希望在哈希表中使用时具有良好的分布 如果这可以在单元测试中验证 那就太好了 EDIT 为了澄清 我的问题是我已经使用了longJava 中的值的方式是第一个 32 位编码一个 ID 第二个 32 位编码另一个
  • 在 Perl 中将整个文件读入哈希值

    我在 Perl 中将文件读入哈希时遇到一些问题 Chr1 supercontig 000000000 1 500 PILOT21 588 1 3 14602 59349 1 Chr1 supercontig 000000001 5 100
  • 如果数据库可访问,加盐和散列有什么意义?

    我刚刚学习了散列的概念 嘿 不要忘记盐 并使用盐来确保密码安全 散列它是一种单向加密 实际上不是加密而是散列 因此无法对其进行逆向工程 加盐是在散列之前在密码上添加随机创建的值的前缀或附加值 因为散列 只是散列 的问题是 一些天才提供了字典
  • 什么是 NOR 逻辑运算符?

    Is nor a 或 b a 或 b a 和 b 还有什么吗 a 或 b see http en wikipedia org wiki Logical NOR http en wikipedia org wiki Logical NOR了解
  • 用于检查字符串是否严格由字母数字组成的正则表达式

    如何检查字符串是否仅包含数字和字母 即 是字母数字吗 考虑到您想要检查 ASCII 字母数字字符 请尝试以下操作 a zA Z0 9 使用这个正则表达式String matches Regex 如果字符串是字母数字 则返回 true 否则返
  • 如何在没有循环的情况下初始化哈希中的值?

    我正在尝试找出一种无需经过循环即可初始化哈希的方法 我希望使用切片来实现这一点 但它似乎没有产生预期的结果 考虑以下代码 usr bin perl use Data Dumper my hash hash currency symbol B
  • 如何添加到 Ruby 中的现有哈希

    关于添加一个key gt value与 Ruby 中现有的填充哈希配对 我正在学习 Apress 的 Beginning Ruby 并且刚刚完成了哈希章节 我试图找到最简单的方法来使用哈希实现与数组相同的结果 x 1 2 3 4 x lt
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 奖励*完整*初学者的代码项目[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为刚接触编程的人提供的课程通常包括一个代码项目 我认为这是一种很好的学习方式 然而 这样的项目往往让人感觉过于做作 因此做起来并没有多大回

随机推荐

  • ScheduledExecutorService 在正常 OS / JVM 上的准确性

    I use ScheduledExecutorService scheduleAtFixedRate运行日常任务 如下所示 executor scheduleAtFixedRate task d 24L 3600 1000 TimeUnit
  • 一般从实体框架返回一个项目

    我遇到过这样的情况 网站可以根据字符串从我的数据库中请求数据 不用担心 我正在防止 SQL 注入 出于各种原因 我希望有一个方法可以返回用户期望的对象 从 EF 最终通过部分页面返回 我在想这样的事情 public
  • 如何在 Qt Creator 中“在 malloc_error_break 中设置断点进行调试”?

    当我点击关闭窗口返回时 我的 Qt5 应用程序崩溃了 MyApp 28741 0x7fff7aa73000 malloc error for object 0x7fc40bc8e300 pointer being freed was not
  • Java 成员枚举类型应该大写吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这里有个问题 我们有 Java 枚举 它们是它们自己的类 而枚举是类的成员 public enum reportType 每次我看到这个都会让我
  • Kafka主题创建:等待节点分配超时

    我有一个本地 Kafka 使用以下命令运行docker compose yml file version 2 services zookeeper image confluentinc cp zookeeper 5 0 1 environm
  • WebGL 与 openGL 中的着色器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用着色器在 WebGL 中使用 特别是在 Three js 中 WebGL 和 Three js
  • EcsService 下班后不稳定

    我从头开始编写了一个 cloudformation JSON 文件 但我无法部署堆栈 并且我没有从 AWS 获得任何关于原因的信息 它卡在服务中CREATE IN PROGRESS4 5 小时 然后它说该服务did not stabiliz
  • sailsjs 数组查询 精确匹配

    我想在 sailsjs 中查询 mongodb 这是我的数据库的结构 users 52ed09e1d015533c124015d5 52ed4bc75ece1fb013fed7f5 user msgs sender 52ed09e1d015
  • 如何在stable/prometheus图表values.yaml中设置prometheus规则?

    使用官方Prometheus chart stable prometheus 定制其values yaml要设置的文件alertmanager yml文件和serverFiles area At rules https github com
  • 大型多CPU系统上的快速进程间(线程间)通信IPC

    对于进程间通信来说 最快的可移植双向通信机制是什么 其中一个应用程序的线程需要与同一台计算机上另一个应用程序中的多个线程通信 并且通信线程可以位于不同的物理 CPU 上 我假设它将涉及共享内存和循环缓冲区以及共享同步机制 但是 当线程在不同
  • SimpleTest 与 PHPunit

    我想知道是否有任何在这方面有经验的人可以解释一下重要的两者之间有什么区别吗 每种方法有什么特定的优势使其适用于任何特定情况吗 这个问题已经过时了 但由于它仍然有流量和答案 尽管我在这里再次陈述我的观点 但我已经在其他一些 较新的 问题上做到
  • 加载 .DLL 文件并访问其中类的方法?

    我对加载这样的库完全陌生 但这就是我的立场 我有一个自制的 DLL 文件 它非常简单 包括类本身和方法 在加载该库的主程序中 我有 Assembly testDLL Assembly LoadFile C dll test dll 从这里开
  • MongoError:未知修饰符:节点js中的$pushAll

    我在保存模型失败时遇到问题mongo 错误 MongoError 未知修饰符 pushAll 我有一个数组字段subDomains在我的架构中 它将使用子域保存为默认值 如下所示 already Domain instance get av
  • 停止 ListView 所选项目的更改,直到按下按钮

    所以我在尝试创建的应用程序中遇到了问题 我创建了一个示例应用程序来演示该问题 在应用程序中 我试图停止所选项目TableView如果未按回车键 则不会更改TextField 在我的实施中 我得到了StackOverFlow错误 我明白为什么
  • 评估预请求脚本时出错

    我正在尝试通过 Post 请求脚本访问 Postman 中 POST 请求的响应 我在下面添加了这两行Pre request Script let response pm response json console log JSON Res
  • SQLite,如何获取数据库中的所有表名?

    您认为从数据库获取所有表名并将它们添加到列表中的正确方法是什么 现在已经到了这一步了 final ArrayList
  • Laravel 守护进程队列内存泄漏

    我正在使用 laravel 5 1 并使用主管来监视队列作业 队列驱动程序是数据库 program queue process name program name s process num 02d command php var www
  • Swing JPanel 不会重新绘制

    我有一个简单的对象可以扩展JPanel 当 的时候update 在此对象上调用方法 这意味着向面板添加一些标签 然后重新绘制 但是调用 update 方法后标签并没有显示 下面是 update 的代码 public void update
  • 尝试渲染部分时局部变量始终为 nil

    在尝试渲染集合时 我遇到了一个非常奇怪的部分问题 我什至尝试了不同的方法 这是我的部分代码 用于调试 pre pre 这是我使用它的尝试 在每种情况下 部分都会
  • “字母数字”哈希 - A-Z、0-9

    我正在寻找一个可以生成 字母数字哈希 的函数 给定一个源字符串 它会生成一个确定的结果字符串 该字符串可以包含任何字母 a z 或数字 0 9 并且无法通过逆向工程来生成源 这将用于为基于秘密数据的系统生成密码 因此 8 到 12 个字符之