Linux C 第八章 数据加密函数

本文介绍了如何使用crypt函数进行数据加密,并通过示例代码展示了如何使用getpass函数安全地获取用户密码输入。加密过程利用了Data Encryption Standard(DES)算法。

第八章 数据加密函数

第八章 数据加密函数
相关头文件:
#include <unistd.h>

crypt :char *crypt(const char *key, const char *salt);
    将密码或数据编码;
    crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅
    取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z, A-Z, 0-9,'.''/'
    所组成,用来决定使用4096种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参
    数key所指向的字符串不会变动。编码过的字符串长度为13个字符,前两个字符为参数salt代表的字符串;
    返回一个指向以NULL结尾的密码字符串;
    使用GCC编译时请加入-lcrypt;
    #include <unistd.h>
    main()
    {
        char passwd[13];
        char *key;
        char salt[2];
        key = getpass("Input First Password:");
        slat[0] = key[0];
        slat[1] = key[1];
        strcpy(passwd, crypt(key, slat));
        key = getpass("Input Second Password:");
        slat[0] = passwd[0];
        slat[1] = passwd[1];
        printf("After crypt(), 1st Passwd:%s\n", passwd);
        printf("After crypt(), 2nd Passwd:%s\n", crypt(key, slat));

    }

getpass : char *getpass(const char *prompt);
    取得一密码输入;
    getpass()会显示参数prompt所指向的字符串,然后从/dev/tty中读取所输入的密码,
    若无法从/dev/tty中读取则会转从标准输入设备中读取密码。所输入的密码长度限制
    在128个这符,包含结束字符NULL,超过长度的字符及换行符('\n')将会被忽略。在输
    入密码时getpass()会关闭字符回应,并忽略一些信号如CTRL-C或CTRL-Z所产生的信号。
    返回一个指向以NULL结尾的密码字符串;
    为系统安全考虑,一般在使用getpass()输入密码后,该密码最好尽快处理完毕,然后
    将密码字符清除;
    #include <unistd.h>
    main()
    {
        char passwd[] = "password";
        char *ptr;
        ptr = getpass("Input password");
        if ( !strcmp(passwd, ptr)) {
            printf("Correct\n");
        } else {
            printf("Incorrect\n");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongYuLong的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值