当前位置: 首页 > 知识库问答 >
问题:

简单非密码散列函数的实现

南门棋
2023-03-14

我是编程的新手,正在苦苦思索如何使用简单的散列函数。

例如,我把下面的代码放在一起测试RS散列函数(用C表示),我不断得到一个SegFault。

也许我错实现了这个功能...我尝试了一些其他简单的散列函数(例如PJW),也得到了SegFaults。

我确实消除了函数的一个原始参数(无符号int长度)(因为我正在完成一个习题集,并且我们的散列函数的规范是它应该只接受一个常量字符串作为输入),但我认为这也没有问题,因为我认为这个参数指的是字符串长度,我可以使用函数内部的strlen轻松获得字符串长度,而不是将其传递给函数。我尝试使用valgrind进行调试,但它没有显示任何内存泄漏。也许我缺少一些关于如何将外部代码合并到自己的源代码中的基本知识。

unsigned int hash(const char *word);

int main(int argc, char *argv[])
{
    // Return error if string name missing from command line
    if (argc != 2)
    {
        printf("Usage: ./recover.c string name\n");
        return 1;
    }
    int i = hash(argv[2]);
    printf("%i\n", i);
}

unsigned int hash(const char *word) // RS Hashing function
{
    unsigned int b = 378551;
    unsigned int a = 63689;
    unsigned int hash = 0;
    unsigned int length = strlen(word);
    unsigned int i = 0;

    for (i = 0; i < length; word++, i++)
    {
        hash = hash * a + (*word);
        a = a * b;
    }

    return hash;
} 

提前感谢您的洞察力!如果能知道我错在哪里,那真的很有帮助。

共有1个答案

解阳荣
2023-03-14

相信@MAT已经拿到了:

分段错误是由于您的argc条件造成的。如果将条件更改为(argc<=2),将避免分段错误。(https://onlinegdb.com/r1udx0lyi)

另外,如果你对“简单的、非密码哈希函数的实现”感兴趣,我邀请你看看下面的网站:

 类似资料:
  • 我试图在我的datacontracts中对我的datamembers密码进行哈希/盐析,但当我添加一个新的学生,然后获取该学生集合时,密码字段尚未进行哈希/盐析,它会返回我键入的内容? 有人能帮我修一下吗?

  • 散列函数非常有用,几乎出现在所有信息安全应用程序中。 哈希函数是将数字输入值转换为另一个压缩数值的数学函数。 散列函数的输入具有任意长度,但输出始终具有固定长度。 散列函数返回的值称为message digest或简称hash values 。 下图说明了散列函数。 Java提供了一个名为MessageDigest的类,它属于java.security包。 此类支持诸如SHA-1,SHA 256,

  • 比方说MD5或SHA-1?这两者的时间复杂度是多少?我试图在网上找到它,但它非常有限,我得到的只是它们都是O(n)。有人能进一步启发我吗?也许给我一个最坏的情况和最好的情况?

  • 我一直在阅读OWASP10,我遇到了存储信息的最佳实践。咸杂碎。在这里,您为每个密码生成一个随机的salt,并对其进行梳理、散列和存储。我的疑问是,如果salt是随机生成的,当用户键入密码时,如何对密码进行身份验证?salt是否与用户名一起保存?如果是这样,这种做法仍然是脆弱的。或者他们是怎么做到的?

  • 我正在尝试将用户从旧的Drupal6 CMS迁移到KeyCloak。我想迁移用户与他们的旧密码,然后分配一个“更新密码”要求的行动到他们的个人资料。 然而,迁移密码似乎有问题,因为我只能以散列形式访问它们。 null 有没有人有幸让这个功能发挥作用?

  • 本文向大家介绍Java HashSet(散列集),HashMap(散列映射)的简单介绍,包括了Java HashSet(散列集),HashMap(散列映射)的简单介绍的使用技巧和注意事项,需要的朋友参考一下 简介 本篇将简单讲解Java集合框架中的HashSet与HashMap。 散列集(HashSet) 快速入门 底层原理:动态数组加单向链表或红黑树。JDK 1.8之后,当链表长度超过阈值8时,