在 C 语言中使用 crypt 函数 |
您所在的位置:网站首页 › c语言获取字节一个位 › 在 C 语言中使用 crypt 函数 |
当前位置:主页 > 学无止境 > 编程语言 > C语言 >
Python
PHP
Java
Go
TypeScript
C++
Vba
Node.js
C语言
MATLAB
在 C 语言中使用 crypt 函数
作者:迹忆客
最近更新:2023/05/05
浏览次数:
本文将介绍几种在 C 语言中使用 crypt 函数的方法。 使用 crypt 函数对密码进行哈希存储crypt 实际上是一个由四个函数组成的系列,提供了用于系统存储或认证的口令散列方法。请注意,这些函数不适合用于通用的加密散列,因为与通用函数相比,密码短语哈希需要昂贵的计算成本,而通用函数的设计是快速的,使用较少的处理能力。 crypt 接受两个 char*参数,作为 const 限定参数传递。第一个参数指向需要哈希的口令,第二个参数是称为 setting 的特殊字符串,应该使用 crypt_gensalt 函数生成。setting 参数为 crypt 函数提供了多个参数,如使用哪种散列算法、散列的计算成本(越大的值对应成本越高)和随机盐字节。注意,盐的字节必须是加密随机的,它们可以从系统专用的随机数生成实用程序中单独获得。下面的例子演示了特殊值–null 指针作为第三个参数传递给 crypt_gensalt 的情况,以表示自动检索随机字节。 有多种哈希算法可供选择(在这个 page 上有详细介绍),它们作为唯一的字符串标识符传递给 crypt_gensalt 函数。一旦 crypt_gensalt 返回 setting 字符串,它就可以和密码一起传递给 crypt 函数,返回值将是可打印的 ASCII 文本的哈希密码。在接下来的示例代码中,我们使用 bcrypt 算法,识别为"2b$"前缀字符串。请注意,crypt_gensalt 函数的第二个参数指定了哈希生成的成本,值 0 指定了给定算法的默认级别。在本例中,我们指定 15,这是 bcrypt 哈希算法的推荐值。 #include "stdio.h" #include "stdlib.h" #include "string.h" #include "crypt.h" enum {MAX_LEN = 1024}; int main(int argc, char *argv[]) { char *text, *encrypted, *salt; size_t len; long lnmax; text = malloc(MAX_LEN); printf("Input string to be hashed: "); if (fgets(text, MAX_LEN, stdin) == NULL) exit(EXIT_FAILURE); len = strlen(text); if (text[len - 1] == '\n') text[len - 1] = '\0'; salt = crypt_gensalt("$2b$", 15, NULL, 0); encrypted = crypt(text, salt); printf("Encrypted: %s", encrypted); free(text); exit(EXIT_SUCCESS); }输出: Input string to be hashed: hello there Encrypted: $2b$15$DkpZq2vJRQoBiK4slxfFa.Eml8PUtFB7CYYH1RJH6XML3ujhX8fqy 使用严格的错误处理例程来保证 crypt 函数的成功执行前面的示例代码从用户那里获取输入字符串,并分配动态内存来存储它,因此,我们需要确保在读取字符串时,stdio 缓冲区中没有任何剩余的字符。因此,我们需要确保在读取字符串时,stdio 缓冲区中没有任何剩余的字符。为此,我们在 stdout 上调用 fflush,然后调用 fgets 从用户那里获取输入字符串。另外,注意检查所有库函数和系统调用的错误返回值,并调用 perror 输出相应的信息。 #include "stdio.h" #include "stdlib.h" #include "string.h" #include "crypt.h" enum {MAX_LEN = 1024}; int main(int argc, char *argv[]) { char *text, *encrypted, *salt; size_t len; long lnmax; text = malloc(MAX_LEN); if (text == NULL) { perror("malloc"); exit(EXIT_FAILURE); } printf("Input string to be hashed: "); fflush(stdout); if (fgets(text, MAX_LEN, stdin) == NULL) exit(EXIT_FAILURE); len = strlen(text); if (text[len - 1] == '\n') text[len - 1] = '\0'; salt = crypt_gensalt("$2b$", 15, NULL, 0); if (salt == NULL) { perror("crypt_gensalt"); exit(EXIT_FAILURE); } encrypted = crypt(text, salt); if (encrypted == NULL) { perror("crypt_gensalt"); exit(EXIT_FAILURE); } printf("Encrypted: %s", encrypted); free(text); exit(EXIT_SUCCESS); }输出: Input string to be hashed: hello there Encrypted: $2b$15$DkpZq2vJRQoBiK4slxfFa.Eml8PUtFB7CYYH1RJH6XML3ujhX8fqy上一篇:在 C 语言中实现字典 下一篇:在 C 语言中使用 nanosleep 函数 转载请发邮件至 [email protected] 进行申请,经作者同意之后,转载请以链接形式注明出处 本文地址: 相关文章 在 C 语言中使用 typedef enum发布时间:2023/05/07 浏览次数:181 分类:C语言 本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。 C 语言中的静态变量发布时间:2023/05/07 浏览次数:151 分类:C语言 本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值 C 语言中生成随机数发布时间:2023/05/07 浏览次数:64 分类:C语言 本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数 C 语言中的 i++ 与++i发布时间:2023/05/07 浏览次数:83 分类:C语言 本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别 C 语言中获取当前工作目录发布时间:2023/05/07 浏览次数:182 分类:C语言 本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法 C 语言中的位掩码发布时间:2023/05/07 浏览次数:126 分类:C语言 本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据 C 语言中的排序函数发布时间:2023/05/07 浏览次数:181 分类:C语言 本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序 C 语言中的 extern 关键字发布时间:2023/05/07 浏览次数:114 分类:C语言 本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量 C 语言中的 #ifndef发布时间:2023/05/07 浏览次数:186 分类:C语言 本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |