“字母数字”哈希 - 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 的相关文章

  • 将 JavaScript 中的大字符串与哈希进行比较

    我有一个带有文本区域的表单 其中可以包含使用多个第三方富文本编辑器之一编辑的大量内容 例如博客文章 我正在尝试实现类似自动保存功能的功能 如果内容发生更改 它应该通过ajax 提交内容 然而 我必须解决这样一个事实 我作为选项的一些编辑器不
  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • 为什么数组前需要加星号?

    我不知道这是哈希问题还是数组问题 但我不明白为什么第三个示例中需要星号 才能获得填充数据的哈希 如果没有它 它会输出一个空的哈希值 coding utf 8 require pp pp first name Shane last name
  • 链表、数组和硬件内存缓存

    虽然之前有人问过关于链表与数组的问题 但答案大多归结为我们大多数人在某些时候可能已经学到的东西 列表擅长插入和删除 数组擅长随机访问 现在 像 Bjarne Stroustrup 这样受人尊敬的人已经argued https www you
  • 如何将目录路径转换为唯一的数字标识符 (Linux/C++)?

    我正在研究获取目录 文件夹 并派生某种形式的唯一数字标识符的方法 我研究了 字符串到哈希 方法 但是 鸽子洞原理 http www codinghorror com blog 2007 12 hashtables pigeonholes a
  • java中带有二维键的映射

    我想要一个在 Java 中由两个键索引的映射 在其中使用两个键放置和检索值的映射 需要明确的是 我正在寻找以下行为 map put key1 key2 value map get key1 key2 returns value map ge
  • 导致堆栈溢出的最短代码是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Node JS 对包含小数/尾随零的数据生成哈希

    在尝试验证 Node JS 中的 Authorize net webhook 通知时 我遇到了以下与小数 尾随零有关的问题 Authorize net 使用 HMAC SHA512 以及 Webhook 通知正文和商家的签名密钥形成哈希 该
  • 数据库、表和列命名约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每当我设计数据库时 我总是想知道是否有命名数据库中项目的最佳方法 我经常问自己以下问题 表名应该是复数吗 列名应该是单数吗 我应该为表或列添加前
  • 编程语言语法中尾随逗号的历史

    许多编程语言允许在其语法中在列表中的最后一项后面使用尾随逗号 据说这样做是为了简化自动代码生成 这是可以理解的 作为示例 以下是 Java 中完全合法的数组初始化 JLS 10 6 数组初始值设定项 http java sun com do
  • Windows 应用程序事实上的标准键盘快捷键列表?

    假设我正在为 Windows 开发一个新的桌面应用程序 是否有我可以查阅的所有 Windows 应用程序都应支持的键盘快捷键列表 来自 Microsoft 或第三方 注意 当我在这里说 所有 Windows 应用程序 时 我的真正意思是 特
  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • 未使用的功能会产生什么后果

    我想知道在代码中使用未使用的函数会产生什么 如果有什么后果 如果您查找并删除所有未使用的函数和变量 性能是否会有明显的改进 或者删除未使用的函数和变量只是一个好习惯 未使用的功能不会损害性能 他们让维护代码的人的工作变得更加困难 现代 ID
  • 如何在 Ruby on Rails 中不使用 eval 将字符串转换为哈希值? [复制]

    这个问题在这里已经有答案了 这里是string需要转换成hash status gt label gt Status collection gt return misc definitions project status 我们不能使用ev
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 负整数的基数排序

    我正在尝试对整数 包括负整数 实现基数排序 对于非负整数 我计划为数字0 9创建一个10个队列的队列 并实现LSD算法 但我对负整数有点困惑 我现在的想法是继续为它们创建另一个包含 10 个队列的队列 并分别对它们进行排序 然后在最后 我将
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 使用面向对象的分析和设计对电梯进行建模[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当涉及到面向对象的设计和分析时 有一组问题似乎在面试和课堂上很常见 这是其中之一 不幸的是 我在大学的 OOP 教授从未真正给出过答案 所以我一

随机推荐

  • 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 个字符之