crypt , encrypt 或 setkey 子例程

用途

对数据进行加密或解密。

标准 C 库 (libc.a)

语法

char *crypt (PW, Salt)
const char * PW, * Salt;
void encrypt (Block, EdFlag)
char Block[64];
int EdFlag;
void setkey (Key)
const char * Key;

描述

cryptencrypt 子例程对数据进行加密或解密。 crypt 子例程使用提供的 PW 参数对固定数据数组执行单向加密。 子例程使用 Salt 参数来改变加密算法。

encrypt 子例程使用先前对 setkey 子例程的调用提供的密钥对 Block 参数中提供的数据进行加密或解密。 输入的 Block 参数中的数据必须是由 64 个字符组成的数组。 每个字符必须是 char 0 或 char 1。

如果需要从 libc.a for crypt 静态绑定函数,请执行以下操作:

  1. 创建文件并添加以下内容:
    #!
    ___setkey
    ___encrypt
    ___crypt
  2. 执行链接。
  3. 将以下内容添加到 make 文件:
    -bI:YourFileName
    其中YourFileName是您在步骤 1 中创建的文件名。 它应该类似于以下内容:
    LDFLAGS=bnoautoimp -bI:/lib/syscalls.exp -bI:YourFileName -lc

提供这些子程序是为了与UNIX系统实现兼容。

参数

描述
BLOCK 标识包含值 (char) 0 和 (char) 1 的 64 字符数组。 返回时,此缓冲区包含已加密或已解密的数据。
EdFlag 确定子例程是对数据进行加密还是解密。 如果此参数为 0 ,那么将对数据进行加密。 如果此参数是非零值,那么将解密数据。 如果 /usr/lib/libdes/usr/lib/libdes_64 文件不存在,并且如果 EdFlag 参数设置为非零值,那么 encrypt 子例程将返回 ENOSYS 错误代码。 /usr/lib/libdes/usr/lib/libdes_64 文件是位于 AIX® 扩展包中的 des 文件集的一部分。
key 指定 0 和 1 的强制类型转换为 const char 数据类型的 64 元素数组。 Key 参数用于加密或解密数据。
PW 指定要加密的字符串。
盐值 确定 PW 参数应用于生成返回的输出字符串的算法。 如果左花括号 ({) 不是 Salt 参数指定的值的第一个字符,那么子例程使用数据加密标准 (DES) 算法。 对于 DES 算法,请使用 Salt 参数以 4096 方法之一来改变散列算法。 Salt 参数必须是来自以下字符类型的 2 字符串:
A - Z
大写字母字符
a-z
小写字母字符
0-9
数字字符
.
时期
/
斜杠
如果左花括号 ({) 是 Salt 参数指定的值的第一个字符,然后可装入密码算法 (LPA) 使用花括号 ({}) 中指定的名称。 一组 Salt 字符跟在 LPA 名称后面,以美元符号 ($) 结尾。 盐字符的长度取决于指定的 LPA。 以下示例显示了 Salt 参数指定的 SMD5 LPA 的可能值:
{SMD5}JVDbGx8K$

返回值

crypt 子例程返回指向加密密码的指针。 此指针指示的静态区域可能被后续调用覆盖。

如果 crypt 子例程不成功,那么将返回空指针并设置 errno 全局变量以指示错误。

错误代码

encrypt 子例程返回以下错误代码:

描述
ENOSYS 使用设置为非零值的 EdFlag 参数调用了 encrypt 子例程。 另外, /usr/lib/libdes /usr/lib/libdes_64 文件不存在。 /usr/lib/libdes/usr/lib/libdes_64 文件是位于 AIX 扩展包中的 des 文件集的一部分。